Spring - Beans Auto-Wiring
Autowiring Modes:
Mode | Description |
---|---|
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를 시도한다. |
Limitations with autowiring:
Autowiring은 프로젝트에 걸쳐 지속적으로 사용되어질 때 최고로 작동한다. 만약 autowiring이 일반적으로 사용되어지지 않으면, 하나 또는 두개의 bean정의를 묶기위해 이것을 사용하는 개발자에게 혼란을 야기할 것이다. 비록, autowiring이 특정 property 또는 생성인자의 필요를 감소시킬 수 있지만, 사용에 앞서 autowiring의 불이익과 제한을 고려해야 한다.
Limitations | Description |
---|---|
Overriding possibility | Autowiring을 사용해도 여전히 <constructor-arg>와 <property>사정으로 의존관계를 명시할 수 있다. 이는 항상 autowiring을 덮어써버릴 것이다(override). |
Primitive data types | 기본타입, String 그리고 class같은 간단한 속성을 autowire 할 수 없다. |
Confusing nature | Autowiring은 명시적 wiring보다 명확하지 않다. 따라서 가능하면 명시적인 wiring을 사용하는 것이 좋다. |