Autowired
필요한 의존 객체의 Type에 해당하는 Bean을 찾아서 주입해준다.
Field vs setter vs constructor(스프링 4.3부터는 생략 가능)
발생 가능한 경우의 수
1. 필요한 의존 객체 type의 Bean이 없는 경우
- Bean이 존재 하지 않지만 이를 주입하라 하기 때문에 Error가 발생한다.
- setter 혹은 field로 의존성 주입을 받는 경우 (required = false)를 사용하여 문제를 해결할 수 있다.
- 하지만 생성자를 사용한 의존성 주입은 생성자에 전달받아야 하는 type의 Bean이 존재하지 않으면 instance를 만들지 못하고 등록이 되지 못한다.
2. 필요한 의존 객체 type의 Bean이 하나인 경우
-
3. 필요한 의존 객체 type의 Bean이 여러개인 경우
- 스프링은 이런 경우 의존성 주입을 못해준다.
- 어느것을 주입해줘야 할지 결정하지 못하기 때문
- @Primary
-- 동일한 type의 Bean이 여러개일 경우 @Primary annotation을 사용하여 어느것을 사용할지 알려주는 방법
- @Qualifier
-- Bean의 id는 클래스의 이름에서 맨 앞의 글자만 소문자로 바뀐 형태
-- 주입을 받을 곳에 @Qualifier("Bean id")를 사용하여 어느것을 사용할지 알려주는 방법
- 모든 빈을 다 받기
-- 말 그대로 동일한 type의 모든 Bean을 주입 받는다
작동원리
BeanPostProcessor의 구현체에 의해서 동작한다.
- BeanPostProcessor란 -> Bean을 initialize한 뒤에(인스턴스를 만든 뒤에) Bean의 initialization이라는 life cycle 이전 혹은 이후 부가적인 작업을 할 수 있는 또다른 Life Cycle Callback이다
- AutowiredAnnotaionBeanPostProcessor가 작동하여 @Autowired를 처리해준다.
'Spring' 카테고리의 다른 글
Spring Framework 4 (0) | 2019.12.12 |
---|---|
Spring Framework 3 (0) | 2019.12.05 |
Spring Framework 1 (0) | 2019.12.04 |
1 (0) | 2019.08.25 |
SpringFramework 3 (0) | 2019.06.13 |