Spring Constructor DI (ref bean주입)

Constructor DI


Spring은 Setter 뿐만 아니라 Constructor를 이용한 생성자 DI또한 지원한다. XML설정은 <property>대신 <constructor-arg>를 이용한다.

Annotation설정은 @Autowired를 생성자 메소드 상단에 입력하여 주면된다.


XML적용방법

 constructor-arg 태그이용

 * messageRender class는 messageProvider를 인자로 받는 생성자가 있어야 한다. 

1
2
3
4
5
6
7
<bean id="messageProvider" name="" class"com.ljs.message.provider.DefaultMessageProvider"/>
 
<bean id="messageRender" name="" class"com.ljs.message.render.DefaultMessageRender">
    <constructor-arg>
        <ref bean="messageProvider"/>
    </constructor-arg>
</bean>    
cs

 

c: 네임스페이스 사용

 * messageRender class는 messageProvider를 인자로 받는 생성자가 있어야 한다. 

1
<bean id="messageRender" name="" class"com.ljs.message.render.DefaultMessageRender" c:messageProvider-ref="messageProvider"/>
cs

 

Annotation적용방법

@Autowired 생성자 지정

 * 생성자를 만들고, Autowired 어노테이션을 추가한다. 주입하려는 대상 bean은 @Service로 등록되어 있어야 한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class DefaultMessageRender implements IMessageRender {
 
    private IMessageProvider messageProvider;
    
    /**
     * Constructor DI를 이용하여 DefalutMessageProvider 객체 Injection
     * Setter는 없어지고 대신 생성자를 만들고 파라메터를 받도록 정의하였다.
     */
    @Autowired
    public DefaultMessageRender(IMessageProvider messageProvider) {
        this.messageProvider = messageProvider;
    }
...
}
cs

 

app-context-annotation.xml 설정

1
2
3
4
5
<!--스프링이 코드기반에서 의존성 요구조건을 스캔하게끔 세팅-->    
<context:annotation-config/>
    
<!--스프링이 코드에서 지정된 패키지(및 하위)아래에 있는 주입 가능한 빈을 모두 스캔하도록 세팅-->
<context:component-scan base-package="com.ljs.message"/>
cs


* 별 다른 설명은 불필요하여 관련 된 소스코드만 첨부 함. 


다운로드


이 글을 공유하기

댓글

Email by JB FACTORY