@Component
class BeanA{
@Autowired
public BeanA(BeanADependency beanADependency){
this.beanADependency = beanADependency;
}
}
스프링 컨테이너의 큰 역할 두가지는 '스프링 빈을 등록하는 것' 과 '의존관계 주입' 이라고 한다. 스프링 빈을 등록할 때는 객체를 생성해서 빈에 등록하는 것이라고 한다. 객체를 생성할때는 반드시 생성자가 실행된다. 이때 생성자를 통한 의존관계 주입이 일어난다고 한다. 그러면 맨 첫번재 @Component
를 스캔할 때는 컨테이너에 사용자가 만든 빈은 아무것도 등록되있지 않을 거 같은데 어떻게 컨테이너에 있는 빈으로 생성자주입을 하는걸까? 라는 의문이 들었다.
BeanADependency 객체가 컨테이너에 생성되있지 않으면 스프링이 먼저 생성한 다음 생성자 주입을 한다고 한다. 스프링이 알아서 해주는 것이다. 스프링 프레임워크도 내부적으로 어떤 코드가 있을텐데 어떻게 만들었는지 참 신기하다.