본문 바로가기
BackEnd/Spring

[Spring] @Autowired의 역할

by summer_light 2021. 8. 30.

@Autowired의 역할

설정 정보를 등록하는 방법은 두 가지가 있다.

  1. xml 이용해 외부 파일에 설정 정보를 등록하는 방법
    <bean id="console" class="spring.di.ui.InlineExamConsole" >
    	<!-- console.setExam(exam); -->
    	<property name="exam" ref="exam"/>
    </bean>
    → <property> 태그를 이용해 직접 XML 파일에 설정 정보를 등록
  2. annotation을 이용해 클래스 파일에 설정을 심는 방법 - 코드에 설정을 심는, 즉 metadata를 심는 것
    <bean id="console" class="spring.di.ui.InlineExamConsole" >
    	
    </bean>
    → XML 파일에 <property> 가 사라지고, class 파일(InlineExamConsole)에 @Autowired와 같은 annotation을 추가

 

 

 

@Autowired 사용하기

annotation을 이용하는 방법의 시작은 @Autowired를 사용하는 것이다. 

Autowired는 객체를 불러올 때 자동으로 인젝션이 될 수 있게 하는 역할을 한다.

 

불러오는 기준

1. 클래스명(Exam)이 같은 bean 

2. 여러 객체가 있을 경우 세터 메소드가 정의될 때의 가인수의 이름(exam)과 id가 같은 bean

보다 명확하게 하기 위해서는 @Autowired 아래에 @Qualifier("AAA") 와 같이 정의해주면 이 Qualifier의 값과 id가 같은 bean을 불러온다. 

 

사용 예시

1. 자동으로 불러오고 싶은 세터위에 @Autowired 를 추가한다.  

//bean이 참조하는 java파일의 세터위에
@Autowired
@Qualified("exam")
@Override
public void setExam(Exam exam) {
	this.exam = exam;
}

2. <bean> 태그들 상단에는 Autowired가 필요한 객체들이 있다는 것을 알려주기 위해 다음과 같은 코드를 추가한다. (여러 개 있더라도 한 번만) 

//<bean> 태그들 상단에
<context:annotation-config />

위와 같은 준비를 하고 나면, xml 파일에서 더 이상 <property> 태그로 세터를 사용하지 않아도 자동으로 setExam이 실행되면서 exam이 인젝션 된다.

<bean id="console" class="spring.di.ui.InlineExamConsole" >
	
</bean>

 

위치

꼭 @Autowired가 세터 위에만 위치하는 것은 아니고, 다음과 같이 다양한 곳에 위치할 수 있다. 

1. 필드: 기본 생성자 실행

2. 생성자 위: 해당 생성자 실행

3. 세터 위: 해당 세터 실행 

 

만약 생성자에서 @Qualifier가 두 개 이상 필요한 경우

생성자(@Qualifier("A") Exam exam1, @Qulaifier("B") Exam exam2) 과 같이 정의한다. 

 

 

 

 

댓글