ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA/SPRING] 의존객체 선택
    개발/Java 2019. 2. 28. 12:26

    의존객체 선택

    • 다수의 빈 객체 중 의존 객체의 대상이 되는객체를 선택하는 방법.

    동일한 객체가 2개 이상인 경우, 스프링 컨테이너는 자동 주입 대상 객체를 판단하지 못해서 Exception을 발생시킨다.

    <context:annotation-config />

    <bean id="wordDao1" class="com.word.dao.WordDao" />
    <bean id="wordDao2" class="com.word.dao.WordDao" />
    <bean id="wordDao3" class="com.word.dao.WordDao" />

    @Autowired
    private WordDao wordDao;

    위 경우에서, 동일한 객체가 3개이므로, Exception이 발생한다.

    @Qualifier annotaion을 통해, 주입할 객체를 명시함으로서 해결할 수 있다.

    <context:annotation-config />

    <bean id="wordDao1" class="com.word.dao.WordDao" />
       <qualifier value="usedDao"/>
    <bean id="wordDao2" class="com.word.dao.WordDao" />
    <bean id="wordDao3" class="com.word.dao.WordDao" />

    @Autowired
    @Qualifier("usedDao")
    private WordDao wordDao;

    프로퍼티의 이름과, bean의 id가 같으면, @Qualifier이 없어도 에러가 발생하지 않고 자동으로 주입 된다

    추천하지 않는 방법

    <context:annotation-config />

    <bean id="wordDao" class="com.word.dao.WordDao" />
    <bean id="wordDao2" class="com.word.dao.WordDao" />
    <bean id="wordDao3" class="com.word.dao.WordDao" />

    @Autowired
    private WordDao wordDao;

    의존객체 자동 주입 체크

    • 자동 주입할 객체가 업는 경우, Exception 에러가 발생한다.

    @Autowired annotation에 required=true 옵션을 통해, 있으면 주입하고, 없으면 주입하지 않게 하면서, Exception을 피할 수 있다.

    웬만하면 사용하지 않음.

    @Autowired(required=false)
    private WordDao wordDao;

    @Inject

    • @Autowired와 거의 비슷하게 어노테이션을 이용해서 의존 객체를 자동으로 주입할 수 있다.

    • required 속성을 지원하지 않는다.

    <context:annotation-config />

    <bean id="wordDao" class="com.word.dao.WordDao" />

    @Inject
    private WordDao wordDao;

    @Autowired의 @Qualifier처럼, @Inject에선, bean의 id를 @Named 어노테이션에 명시함으로서 의존객체를 선택할 수 있다.

    <context:annotation-config />

    <bean id="wordDao1" class="com.word.dao.WordDao" />
    <bean id="wordDao2" class="com.word.dao.WordDao" />
    <bean id="wordDao3" class="com.word.dao.WordDao" />

    @Inject
    @Named(value="wordDao1")
    private WordDao wordDao;


    댓글

Designed by Tistory.