최대 1 분 소요

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"을 지웠다.

image
실행하면 성공적으로 작동한다.

📌 @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를 이용하여 변수명을 지정해줘야 한다.

카테고리:

업데이트:

댓글남기기