더북(TheBook)

예제 3-106 app-context-01.xml 구성 파일([[bean-autowiring]] app-context-01.xml)

<beans ...">
    <bean id="johnMayer" class="com.apress.prospring5.ch3.xml.Singer"
        depends-on="gopher"/>
    <bean id="gopher" class="com.apress.prospring5.ch3.xml.Guitar"/>
</beans>

 

이 구성을 통해서 johnMayer 빈이 gopher 빈에 의존한다는 것을 스프링에게 알립니다. 스프링은 빈 인스턴스를 생성할 때 이를 고려해야 하며 johnMayer보다 gopher를 먼저 생성해야 합니다. 하지만 이렇게 하려면 johnMayerApplicationContext에 접근해야 합니다. 따라서 스프링에게 이 참조를 주입하도록 지시해서 johnMayer.sing() 메서드가 호출될 때 gopher 빈을 얻을 수 있어야 합니다. 이는 Singer 빈이 ApplicationContextAware 인터페이스를 구현한다면 가능합니다. ApplicationContext는 스프링이 제공하는 인터페이스로 이 인터페이스를 구현하려면 ApplicationContext를 가져오는 수정자를 구현해야 합니다. ApplicationContextAware를 구현한 빈은 스프링 IoC 컨테이너에 의해 자동으로 감지되고 해당 빈 내부에 생성된 ApplicationContext가 주입됩니다. 이러한 과정은 빈 생성자가 호출된 이후에 수행되므로 생성자에서 ApplicationContext를 사용하면 NullPointerException이 발생합니다. Singer 클래스의 코드는 다음에서 볼 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.