인터넷 강의를 듣고 공부한 내용을 포스팅합니다.
'윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정' 이란 강의를 듣고 있습니다.
어노테이션을 이용한 빈설정
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
*/
끝!
'Spring' 카테고리의 다른 글
Annotation(어노테이션) JSR-250 어노테이션 (0) | 2021.07.23 |
---|---|
Annotation(어노테이션) 주입 (0) | 2021.07.21 |
Annotation(어노테이션) 자바 코드를 이용한 bean 등록 (0) | 2021.07.19 |
DI(Dependency Injection) 자동주입 (0) | 2021.07.18 |
DI(Dependency Injection) Setter메서드를 통한 주입 (0) | 2021.07.17 |