記錄

Spring) @Autowired의 활용 ( + @Qualifier 사용) 본문

Web/Spring framework

Spring) @Autowired의 활용 ( + @Qualifier 사용)

surhommejk 2018. 4. 28. 16:47


<?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.xsd">
<!--
@Qualifier
목적 : @Autowired의 목적에서 동일 타입의 빈객체가 존재시 특정빈을 삽입할 수 있게 설정한다.
설정위치 : @Autowired 어노테이션과 함께 사용된다.
추가설정 : 동일타입의 빈객체 설정에서 <qualifier value="[alias명]" />를 추가하여 준다.
-->

    <context:annotation-config />

    <bean id="monitorViewer" class="DI_Annotation_02.MonitorViewer"></bean>
    
    <bean id="xx" class="DI_Annotation_02.Recorder">
        <qualifier value="corder1" />
    </bean>
    
    <!--위(xx)와 아래(yy) 모두 타입이 같다. 따라서 @Autowired을 사용할 경우
        문제가 생길 수 있다. 왜냐하면 @Autowired는 type으로 구분하여 bean을
        찾아가기 때문이다. 따라서 이를 구분해주기 위한 값으로 qualifier의 value를
        설정한다. 여기서 설정된 value는 반드시 @Autowired와 @Qualifier가 선언 되는
        곳에서 @Qualifier가 가리키는 값과 일치하여야 한다
    -->
    
    <bean id="yy" class="DI_Annotation_02.Recorder">
        <qualifier value="corder2"></qualifier>
    </bean>
    
</beans>


public class Recorder {

}


public class MonitorViewer {
    
    private Recorder recorder;

    public Recorder getRecorder() {
        return recorder;
    }

    @Autowired
    @Qualifier("corder1") //<qualifier value="corder1" />
    public void setRecorder(Recorder recorder) {
        this.recorder = recorder;
        System.out.println("setter 주입 성공");
    }
    
    @Autowired
    @Qualifier("corder2") //<qualifier value="corder2"></qualifier>
    public void RecorderMethod(Recorder rec) {
        System.out.println("rec : " + rec);
    }
    
}


public class Program {

    public static void main(String[] args) {
        /*
        JAVA 코드 방식
        MonitorViewer viewer = new MonitorViewer();
        Recorder recorder = new Recorder();
        viewer.setRecorder(recorder);
        viewer.getRecorder();
        */
        ApplicationContext context =
                new GenericXmlApplicationContext("classpath:DI_Annotation_02/DI_Annotation_02.xml");
        MonitorViewer viewer = context.getBean("monitorViewer", MonitorViewer.class);
        System.out.println(viewer.getRecorder());
    }

}



Comments