JAKARTAPROJECT
JAKARTA TIPJSP TIPJSP 질문&답변DATABASE TIPJAVASCRIPT TIPWEBHACKING TIP기타 TIP
JSP 팁
JSP 팁
JSP 팁 게시판 입니다
spring 자동묶기
kaiser
이미지 슬라이더 보기
 

지금까지 <property> 요소를 사용하여 빈의 모든 특성을 명시적으로 묶는 방법을 알아봤다. 다른 방법으로, 다음과 같이 묶고자 하는 <bean>  autowire특성을 설정함으로써 spring으로 하여금 자동으로 빈을 묶게 있다.

 

아래는 명시적으로 빈을 묶는 방법이다.

 

<bean id="courseService" class="com.springinaction.training.service.CourseServiceImpl">

   <property name = "courseDao">

      <ref bean="courseDao"/>

   </property>

   <property name = "studentService">

      <ref bean="studentService"/>

   </property>

</bean>

 

다음은 자동 묶기 방법이다.

 

<bean id="courseService" class="com.springinaction.training.service.CourseServiceImpl" autowire="byName">

 

자동묶기에는 다음과 같은 네가지 종류가 있다.

 

1. byName : 묶고자 하는 특성의 이름과 동일한 이름이나 ID 가진 빈을 컨테이너에서 찾는다. 빈을 찾지 못하면 특성은 묶이지 않은채 남는다.

2. byType : 묶고자 하는 특성의 타입과 동일한 타입을 가진 빈을 컨테이너에서 찾는다. 빈을 찾지 못하면 특성은 묶이지 않는 채로 남고, 하나 이상의 빈을 찾게 되면 UnsatisfiedDependencyException 던져진다.

3. constructor : 묶고자 하는 빈의 생성자 하나의 파라미터와 맞는 하나 이상의 빈을 컨테이너에서 찾는다. 모호한 빈이나 생성자가 발견될 경우 UnsatisfiedDependencyException 던져진다.

4. autodetect : constructor 의한 자동 묶기를 먼저 시도한 다음, byType 이용한다. 모호함이 발견될 경우 UnsatisfiedDependencyException 던져진다.

 

 

명시적 묶기와 자동 묶기의 혼용

 

자동묶기를 선언하여도 다른 특성을 명시적으로 묶을수 있다. 예를 들어 CourseServiceImp courseService 여전히 자동 묶기로 하면서 courseDao 특성을 명시적으로 묶으려면 다음과 같이 하면 된다.

 

<bean id="courseService" class="com.springinaction.training.service.CourseServiceImpl" autowire="byName">

   <property name = "courseDao">

      <ref bean="someOtherCourseDao"/>

   </property>

</bean>

 

자동 묶기와 명시적 묶기를 함께 사용하는 것은 byType 사용해 자동 묶기를 했을때 발생할 있는 모호성을 처리하기 위한 방법이기도 하다.

 

자동 묶기를 기본으로 설정

 

<bean default-autowire="byName"> 라고 선언하면 spring 설정 파일에 있는 모든 빈에 대해 기본으로 자동묶기가 설정되는 것이다. 그리고 특정 빈에 대해서 명시적 묶기도 가능하다.

 

자동묶기를 것인가 것인가?

 

자동묶기는 묶기 파일을 작성할때 필요한 수동 설정의 양을 절감시키는 강력한 방법이지만, 가지 문제를 야기 시킬 수도 있다.

 

예를 들어 studentService 빈이 byName 사용하여 자동 묶기가 되어 있다고 가정해 보면, studentDao 특성은 컨테이너 안에 studentDao라는 이름의 빈으로 자동 설정 것이다. 이제 studentDao 특성의 이름을 studentData 변경하는 리팩토링을 하고자 한다. 리팩토링이 끝난 , 컨테이너는 자동 묶기를 위해 studentDao라는 이름을 가진 빈을 검색하려 것이다. xml 파일을 수정하지 않는 , 컨테이너는 이름을 가진 빈을 찾지 못하여 특성은 묶여지지 않은채로 남을 것이며, studentService 빈이 studentData 특성을 사용하려 할때에는 NullPointerException 얻게 것이다.

 

또한 studentData라는 이름을 가진 빈이 존재하지만, 그것이 studentData 특성과 묶고자 하는 빈이 아닌 경우에는 studentData 빈의 타입이 무엇이냐에 따라, spring 빈과의 묶기를 정확히 성공 시킬수도 있으며, 결과 애플리케이션이 예상치 못한 작동을 수도 있는 것이다.

2012-11-05 08:12:14
211.189.124.***

서현사랑~ 안녕 안녕 나의 아기별~~

0점 (0명)
덧글 0개 | 태그 1개 | 관련글보기
태그입력
쉽표(,)구분으로 한번에 여러 태그를 입력할수 있습니다
spring (18)
이름 비밀번호
JSP 팁
JSP 팁 게시판 입니다
! 번호 제목 글쓴이 일자 조회
114 STS Spring MVC on STS 2.8, 2.9 버전에서 프로젝트 생성시 에러발생 할 경우 1 GoodBug 2012-03-08 8,029
113 dbcp DBCP 사용시 DB정보 암호화 1 GoodBug 2012-02-08 5,538
112 스트럿츠 action alert 메시지 출력 후 페이지 이동 & 뒤로가기 예방 행복한광대 2009-01-14 11,588
spring spring 자동묶기 1 kaiser 2007-03-12 11,799
110 spring Spring 빈묶기- 생성자를 통한 의존성 주입 2 1 kaiser 2007-02-21 21,565
109 spring Spring 빈묶기-세터메소드를 통한 의존성 주입 1 kaiser 2007-02-21 11,866
108 spring Spring - xml로 묶기 1 kaiser 2007-02-07 12,344
107 spring Spring 빈묶기-기본묶기 1 kaiser 2007-02-05 8,765
106 spring spring 빈묶기-2 1 kaiser 2007-01-29 9,628
105 spring Spring 빈묶기-1 1 kaiser 2007-01-29 9,706
104 spring Spring 1차 요약 1 kaiser 2007-01-23 10,768
103 spring spring 시작하기-2 1 1 kaiser 2007-01-22 9,931
102 spring Spring 시작하기-1 4 1 kaiser 2007-01-22 11,637
101 spring Spring 서론 - spring 설치 1 1 kaiser 2007-01-19 13,314
100 clob 사용하기 kaiser 2008-08-21 7,632
99 span 글쓰기 후 사용할 protoload 1 1 고고싱 2008-05-09 7,120
98 log4sql log4sql 1 1 Aki 2008-04-30 8,352
97 숫자 세자리마다 콤마 찍기 1 곱슬대마왕 2008-03-21 8,463
96 iBatis iBatis 에서 SQL 로깅시 이뿌게 보이기 6 1 GoodBug 2007-10-26 22,565
95 log4sql요즘 많이 쓰는것 같던데.... 영이남푠 2008-10-17 8,078
copyright 2005-2018 by Unicorn