[Spring]@Autowired동작방식과 @Qualifier
Spring
@Autowired는 자료형을 기준으로 찾는다
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
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-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<context:annotation-config/>
<bean class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" />
<bean id="console" class="spring.di.ui.InlineExamConsole">
</bean>
</beans>
Exam객체를 생성하는 <bean>
의 id="exam"
을 지웠다.
실행하면 성공적으로 작동한다.
📌 @Autowired
는 자료형을 기준으로 연결한다(기본동작)
변수명을 기준으로 연결하기도 함 (밑에 나옴)
@Qualifier
public class InlineExamConsole implements ExamConsole {
private Exam exam;
...
@Autowired
@Qualifier("exam1")
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
}
@Qualifier
를 사용하여 exam1을 Autowired하도록 설정한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
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-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<context:annotation-config/>
<bean id="exam1" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" />
<bean id="exam2" class="spring.di.entity.NewlecExam" p:kor="20" p:eng="20"/>
<bean id="console" class="spring.di.ui.InlineExamConsole">
<!-- <property name="exam" ref="exam"/> -->
</bean>
</beans>
exam객체 exam1과 exam2가 두 개 있다.
그냥 @Autowired
를 사용하면 error가 발생한다!
📌 @Qualifier
를 사용하여 어떤 객체를 Autowired할 지 작성해야 한다!
✨ 정리 : @Autowired
는 자료형을 기본으로 DI하지만, 식별이 모호할 경우 변수명을 사용한다.
이때 @Qualifier
를 이용하여 변수명을 지정해줘야 한다.
댓글남기기