티스토리 뷰
@Autowired
@Autowired란?
-
@Autowired는 의존성을 "타입"을 통해 찾아 주입해주는 역할을 해준다
-
그래서 사용하면 굉장히 편리해진다!
-
생성자(스프링 4.3부터 생략 가능), 세터, 필드 에서 사용할 수 있다!
-
위와 같이 써주면 자동으로 bean을 찾아서 주입해준다!
-
이 때 bookRepository도 bean으로 등록되어 있지 않다면
-
값이 안들어가는게 아니라 프로그램이 안돌아간다
-
왜냐하면 @Autowired는 기본적으로 required 값이 true여서 해당 빈을 못 찾으면 실행이 안된다
-
그래서 @Autowired(requried=false) 로 쓴다면 오류가 안난다! requred=true 인 것을 기억해두자!
같은 타입의 Bean이 여러개 일 때 @Autowired를 사용하면?
-
만약 동일한 interface를 구현한 여러개의 클래스가 있고 해당 인터페이스에 @Autowired를 사용하면 어떻게 될까?
-
bookRepository 를 구현한 Book1, Boo2 중 뭐를 고를지 몰라서 오류가 난다!
-
이 때 해결방법이 있다
-
첫째로 @Primary를 사용하면 된다!
-
이렇게 @Primary를 붙이면 해당 bean을 주입하게 된다
-
두번째 방법은 여러개의 bean을 리스트로 다 받는 방법이다!
-
이렇게 List로 여러개를 받아올 수 있다!
-
세번째 방법은 @Qualifier("bean id") 를 사용하는 방법이다
-
이렇게 3가지의 방법으로 해결할 수 있다!
@Autowired 의 동작 원리
-
@Autowired는 어떻게 bean들을 찾아서 주입할까?
-
바로 BeanPostProcessor라는 라이프 사이클 인터페이스의 구현체인
-
AutowiredAnnotationBeanPostProcessor를 사용한(https://docs.spring.io/springframework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html)
-
BeanPostProcessorimplementation that autowires annotated fields, setter methods, and arbitrary config methods. Such members to be injected are detected through annotations: by default, Spring's@Autowiredand@Valueannotations. 라는 글이 적혀있는 것을 볼 수 있다!
아직 동작원리 부분이 완벽하게 이해가지 못해서 제대로 정리를 못한것같다..!
하지만 @Autowired는 편하다
근데 스프링 부트 책을 읽다보니 @Autowired 보다도 생성자로 의존성을 주입하는걸 권장한다
일단 스프링4.3부터 생성자에서는 @Autowired가 생략 가능하고 롬복을 사용하면 코드가 더 간단하고 쉬워진다
나중에는 롬복 + 생성자를 통한 의존성주입에 대해 정리를 해봐야겠다!
'Spring > Spring IoC' 카테고리의 다른 글
Spring Profile에 대해 알아보자! (0) | 2020.05.18 |
---|---|
Bean의 스코프에 대해 알아보자 (3) | 2020.05.17 |
@ComponentScan에 대해 알아보자 (0) | 2020.05.17 |
스프링 Bean 설정방법 (2) | 2020.05.15 |
스프링 IoC 컨테이너와 빈 (1) | 2020.05.15 |
댓글