자동연결(autowring)과 특수주석(annotation) 사용하기
스프링 컨테이너는
다음과 같은 자동연결 모드를 통해서 스프링 컨테이너가 의존성 주입을 자동적으로 처리하는 방법을 결정할 수 있다.
- no : 기본값, 자동연결을 하지 않는다.
- byName : 속성의 이름과 동일한 이름으로 정의된 빈을 연결한다.
- byType : 속성의 타입과 동일한 타입으로 정의된 빈을 연결한다. 동일한 타입으로 여러개의 빈이 정의되어 있는 경우에는 예외가 발생한다.
- constructor : 이것은 byType과 비슷하지만 생성자 타입에서 찾는다는 차이가 있다. 여러개의 빈이 정의되어 있는 경우에는 예외가 발생한다.
- default : constructor로 자동연결을 시도하는데 처리가 되지 않으면 byType으로 자동연결을 한다.
HelloWorld를 다음과 같이 수정하면, byName으로 자동연결된다.
<bean name="message" class="java.lang.String">
<constructor-arg value="auto wired" />
</bean>
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld"
autowire="byName">
</bean>
실행하면 auto wired가 출력될 것이다.
스프링은 특수주석을 통한 설정도 제공하고 있다.
- @Required : 빈 속성 설정 메서드(setter)에 적용된다.
- @Autowired : 빈 속성 설정 메서드(setter), 생성자, 속성들에 적용된다.
- @Qualifier : @Autowired와 함께 쓰인다. qualifier 이름을 지정할 수 있다.
어노테이션을 통해서 자동연결을 하기 위해서는 어플리케이션 컨텍스트에 다음 내용이 추가되어야 한다.
<context:annotation-config/>
특수주석을 사용할 있게 수정한 어플리케이션 컨텍스트 설정은 다음과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-
3.0.xsd">
<context:annotation-config/>
<bean name="message" id="message" class="java.lang.String">
<constructor-arg value="auto wired" />
</bean>
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld">
</bean>
</beans>
HelloWorld 클래스에 특수주석을 적용해 보자. 여기서는 설정 메서드(setMessage)에 특수주석을 붙였지만, message 속성에 @Autowired를 붙여도 된다.
public class HelloWorld implements ApplicationContextAware,BeanNameAware,
InitializingBean,BeanFactoryAware,BeanPostProcessor, DisposableBean {
private String message;
public String getMessage() {
return message;
}
@Autowired
public void setMessage(String message) {
this.message = message;
}
//code omitted for brevity
}
프로그램을 실행하면 auto wired 메시지가 출력된다.