본문 바로가기

Spring

Annotation(어노테이션)을 이용한 빈 설정

인터넷 강의를 듣고 공부한 내용을 포스팅합니다.

'윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정' 이란 강의를 듣고 있습니다.

 

 

어노테이션을 이용한 빈설정

Spring 2.5 버전 부터 xml통한 빈 설정 방법 외에 어노테이션을 이용한 빈 설정 방법을 제공하고 있습니다. 

xml 빈 설정 파일에 

<context:annotation-config/>

를 적어주면 xml파일이 아니고 빈 클래스의 어노테이션을 검색해 스스로 반영하게 된다.

 

 

@Required

반드시 주입해야 할 프로퍼티로 설정하는 어노테이션입니다.

스프링 5.1버전부터는 권장하지 않고 꼭 주입해야 할 프로퍼티는 생성자 주입을 사용하도록 합니다.

 

@Autowired

xml파일과 자바파일에 모두 빈설정을 하면서 진행해 보겠습니다.

xml

<context:annotation-config/>

<bean id="xml1" class="kr.co.softcampus.beans.TestBean1"/>

<bean class="kr.co.softcampus.beans.DataBean1"/>

java

@Bean
public TestBean1 java1() {
	return new TestBean1();
}
@Bean
public DataBean1 data_bean1() {
	return new DataBean1();
}

다음과 같이 빈을 설정해주고

이제 TestBean1에 어노테이션을 설정해 줍니다.

TestBean1

//자동 주입을 변수에 설정한다.
//자동으로 setter메서드가 추가되어 setter메서드를 통해 주입 받게 된다.
@Autowired
private DataBean1 data3;

이제 메인에서 xml과 자바파일을 이용한 출력을 해주면

/*
결과
xml1.data3 : kr.co.softcampus.beans.DataBean1@140e5a13
java1.data3 : kr.co.softcampus.beans.DataBean1@10e92f8f
*/

 

@Qualifier

@Autowired만을 사용하면 타입을 기준으로 가져오기 때문에 같은 타입의 객체가 여러개 있으면 오류가 발생합니다.

해서 @Qualifier를 사용해서 정해준 이름의 객체를 가져와 주입해 줍니다.

 

xml

<bean id="obj4" class="kr.co.softcampus.beans.DataBean2"/>
<bean id="obj5" class="kr.co.softcampus.beans.DataBean2"/>

위에서 적어준 xml에다가 추가해줍니다.

 

java

@Bean
public DataBean2 obj4() {
	return new DataBean2();
}
@Bean
public DataBean2 obj5() {
	return new DataBean2();
}

 

위에서 적어준 자바파일에 추가해 줍니다.

TestBean1

@Autowired
@Qualifier("obj4")
private DataBean2 data4;

@Autowired
@Qualifier("obj5")
private DataBean2 data5;

obj4,obj5의 이름을 가진 객체를 가져와 주입해줍니다.

/*
결과
xml1.data4 : kr.co.softcampus.beans.DataBean2@3439f68d
xml1.data5 : kr.co.softcampus.beans.DataBean2@dbd940d
java1.data4 : kr.co.softcampus.beans.DataBean2@7ce3cb8e
java1.data5 : kr.co.softcampus.beans.DataBean2@78b66d36
*/

 

이 때 @Qualifier에 정해준 이름을 가진 객체가 없다면 당연히 오류가 발생하게 되는데, '있으면 되고 안됨 말아라' 설정을 해주고 싶다면

@Autowired(required=false)
@Qualifier("obj6")
private DataBean2 data6;

설정을 해줍니다. 따로 obj6객체를 설정해주지 않았기 때문에 결과는

/*
결과
xml1.data6 : null
java1.data6 : null
*/

 

끝!