뉴렉쳐 스프링 프레임워크 정리

[13강] @Autowired의 동작방식 이해와 @Qualifier 사용하기

째로스 2023. 6. 10. 15:30

먼저 @Autowired 어노테이션을 사용하기 위해서는 context 네임스페이스를 xml에 추가해줘야한다.

<beans xmlns="http://www.springframework.org/schema/beans"
	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
	xmlns:context="http://www.springframework.org/schema/context">

 

annotation을 사용하지 않고 xml에서 exam을 console에 Injection함

//코드 내부
public void setExam(Exam exam){
	this.exam=exam;
}

--------------------------------------------------
<!-- pom.xml -->
<bean id="exam" class="entity.NewlecExaml"/>
<bean id="console" class="ui.InlineExamConsole">
	<property name="exam" ref="exam"/>
</bean>

annotaion을 사용하여 exam 객체를 console에 Injection함

//코드 내부
@Autowired
public void setExam(Exam exam){
	this.exam=exam;
}

--------------------------------------------------
<!-- pom.xml -->
<context:annotation-config />
<bean id="exam" class="entity.NewlecExaml"/>
<bean id="console" class="ui.InlineExamConsole"/>

<context:annotation-config /> 구문을 통해 앞으로 @Autowired 어노테이션이 사용되는 경우 해당

객체가 컨테이너에 생성되었는지 확인하게 된다.

 

이 때, @Autowired는 exam이라는 객체를 자료형을 기준으로 찾는 것인가 변수명으로 찾는 것인가?

@Autowired
@Override
public void setExam(Exam exam){
	this.exam=exam;
}

------------------------------------------------------------------------------
<!-- pom.xml -->

<context:annotation-config/>
<bean class="sprint.di.entity.NewLecExam"/>

=> bean의 class에서 자료형을 기준으로 부합되는 객체를 @Autowired를 통해 생성함(id 입력없이도 객체 찾음)

@Autowired
@Override
public void setExam(Exam exam){
	this.exam=exam;
}

------------------------------------------------------------------------------
<!-- pom.xml -->

<context:annotation-config/>
<bean class="sprint.di.entity.NewLecExam" p:kor="10" p:eng="10"/>
<bean class="sprint.di.entity.NewLecExam" p:kor="20" p:eng="20"/>

만약 위와 같이 같은 객체가 두개 이상 컨테이너에 있으면 오류가 발생한다.

 

@Autowired
@Qualifier("exam1")
@Override
public void setExam(Exam exam){
	this.exam=exam;
}

------------------------------------------------------------------------------
<!-- pom.xml -->

<context:annotation-config/>
<bean id="exam1" class="sprint.di.entity.NewLecExam" p:kor="10" p:eng="10"/>
<bean id="exam2" class="sprint.di.entity.NewLecExam" p:kor="20" p:eng="20"/>

단, Qualifier와 id를 사용하면 위와 같은 경우 오류가 발생하지 않고, id가 exam1인 객체를 받아온다.