본문 바로가기
Spring

Spring Framework 2

by irerin07 2019. 12. 4.
728x90

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를 처리해준다.

728x90

'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