반응형

Spring - Beans Auto-Wiring


(원문 위치 : http://www.tutorialspoint.com/spring/spring_beans_autowiring.htm )

XML설정 파일에서 <bean> 요소를 사용하여 bean을 선언하는 방법과 <constructor-arg>와 <property> 요소를 사용하여 <bean>을 삽입하는 법을 배웠다.

Spring container는 대규모 Spring기반 프로그램에서 XML설정파일을 줄일 수 있도록 <constructor-arg>와 <property> 요소의 사용없이 관련된 bean들의 관계를 자동으로 묶을 수 있다.(autowire - DI가 wire로 불리기도 하므로 autowire는 자동DI정도로 봐도 무방할 듯 싶다.)

Autowiring Modes:

DI의 autowiring을 사용하기 위해 Spring container에 지시(명려)하는데 사용될 수 있는 auto wiring 모드는 아래와 같다. bean정의를 위한 outwore mode를 지저ㅓㅇ하기 위해 <bean/>요소의 outwore 속성을 사용한다.
ModeDescription
no

autowiring이 아님을 의미하는 기본설정이고 wiring을 위한 명시적 bean참조를 사용한다. 이 wiring을 위해 특별하게 할 작업은 없다. 이것은 이미 Dependency Injection 강좌에서 본 것이다.

byName

 속성(property)명에 의한 autowiring. Spring container는 XML 설정파일에서 autowire 속성이 'byName'으로 설정된 bean의 속성을 찾는다. 그리고 설정파일내에서 속성이 동일 이름으로 bean이 정의되어진 것을 찾고 묶으려고 시도한다.

byType

Datatype속성에 의한 autowiring. Spring container는 XML 설정파일에서 autowire 속성이 'byType'으로 설정된 bean의 속성을 찾고, 그것의 type이 정확하게 하나로 일치한다면 속성을 묶는다. 만약 하나이상의 bean이 있다면, 'fatal exception'이 발생한다.

constructor

byType과 유사하지만 type이 생성자의 인자에 적용된다. 만약 container의 생성자의 인자 타입이 정확하게 일치하는 것이 없다면, 'fatal exception'이 발생한다.

autodetect

Spring은 우선 'constructor'로 autowiring을 시도한다. 만약 실패하면, Spring은 'byType'으로 autowire를 시도한다.

배열(array)과 다른타입 collection(other typed-collection)을 묵기위해 byType 또는 constructor autowiring 모드를  사용할 수 있다.

Limitations with autowiring:

Autowiring은 프로젝트에 걸쳐 지속적으로 사용되어질 때 최고로 작동한다. 만약 autowiring이 일반적으로 사용되어지지 않으면, 하나 또는 두개의 bean정의를 묶기위해 이것을 사용하는 개발자에게 혼란을 야기할 것이다. 비록, autowiring이 특정 property 또는 생성인자의 필요를 감소시킬 수 있지만, 사용에 앞서 autowiring의 불이익과 제한을 고려해야 한다.

LimitationsDescription
Overriding possibility

Autowiring을 사용해도 여전히 <constructor-arg>와 <property>사정으로 의존관계를 명시할 수 있다. 이는 항상 autowiring을 덮어써버릴 것이다(override).

Primitive data types

기본타입, String 그리고 class같은 간단한 속성을 autowire 할 수 없다.

Confusing nature

Autowiring은 명시적 wiring보다 명확하지 않다. 따라서 가능하면 명시적인 wiring을 사용하는 것이 좋다.


반응형

+ Recent posts