IT 강의 정리/윤재성의 스프링 입문

[섹션4][Annotation] 16강~19강 init, destroy 메서드/ 주입/ 어노테이션을 이용한 빈 설정/ JSR-250어노테이션

Nellie Kim 2022. 10. 12. 16:43
728x90

16. init, destroy 메서드

xml파일로 init, destroy메서드등록과 자바파일로 등록하는법 비교해보면 아래와 같다.

17. 주입

xml파일로 자동주입등록과 자바파일로 등록하는법 비교해보면 아래와 같다.

beans.xml
BeanConfigClass.java

 

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

어차피 만들어질 빈클래스를 xml이나 자바파일에 설정하지말고, 해당 파일(TestBean1)에서 어노테이션으로 간편하게 설정해보자.

 

우선 아래와 같이 xml파일에 context 네임스페이스를 추가 해줘야 한다. 

1) @Required

반드시 주입해야 할 프로퍼티가 있다면 @Required 를 붙여준다. 그러나 스프링 5.1 부터는 @Required를 붙여도 아무런 일이 일어나지 않는다. 반드시 주입해야 할 프로퍼티는 생성자를 통해 주입받는 것을 사용해야 한다.

TestBean1.java

2) @Autowired

객체만 오토와이어가 가능하다. TestBean1.java파일에 @Autowired를 붙여서 직접 주입 해보자! 이때 같은 '타입'에 주입을 하는 것이기 때문에 그 타입이 정해지지 않았다면 오류가 발생한다.

@Autowired 넣을때는 반드시! 빈을 정의(beans.xml, BeanConfigClass.java 에 작성)해 줘야한다. 그래야 그 작성된 빈을 가져와서 주입할 수 있으니까.

@Autowired는 세터메소드에 붙여도 되고 , 변수에 붙여도 되고, 생성자에 주입 해도 된다.

TestBean1.java
TestBean.java  자동주입을 세터메소드에 설정
TestBean.java  자동주입을 변수에 직접 설정

3) @Qualifier

같은 타입의 빈이 여러개 있을 경우에, 타입을 가지고 주입하면 오류가 발생했었다.  그럴때는 이름을 통해(byName) 주입을 했었는데, @Autowired로 주입할 때도 같은 타입의 빈이 여러개 있으면 이름을 지정해서 주입을 하는 방법을 사용한다.

@Qualifier("빈이름") 으로 해당 빈을 찾아서 주입한다.

TestBean1.java

4) 생성자 주입

 

 

19 . JSR-250 어노테이션

먼저, Maven Repository에서 Javax Annotation API검색해서 아래와 같은 라이브러리를  pom.xml에 추가해줘야 한다.

JSR-250어노테이션은 이름을 통한 주입을 좀 더 쉽게 하기위해 사용하는 것이다.많은 어노테이션이 있지만, 스프링에서는 @postConstructor, @preDestroy, @Resource 정도 사용을 한다.

1) @postConstructor, @preDestroy

init-method 와 destroy-method 역할을 하는 것이 @postConstruct 와 @preDestroy이다.

BeanConfigClass.java 파일에 아래와 같이 설정했던 것을, 

BeanConfigClass.java

TestBean1.java파일에 직접 설정해 주도록 하자.

TestBean1.java

2) @Resource

@Autowired 와 @Qualifier("빈이름") 을 설정해주면 빈의 이름을 통해서 주입을 할 수가 있었다. 그 두개를 합쳐놓은게 @Resource이다. 이번엔 빈이름이 아닌 , 변수의 이름과 동일한 이름을 가져와 주입이 된다.

 

 

 

출처 :  [인프런]윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정