1.4.6 메소드 주입 by sh
대부분의 응용 프로그램 시나리오에서 컨테이너의 대부분의 bean은 singleton 입니다. 싱글 톤 빈이 다른 싱글 톤 빈과 협업해야하거나 싱글 톤이 아닌 빈이 다른 싱글 톤이 아닌 빈과 협업해야하는 경우 일반적으로 빈을 다른 빈의 프로퍼티로 정의하여 의존성을 처리합니다. 빈의 수명주기(라이프사이클)이 다른 경우 문제가 발생합니다. 싱글 톤 빈 A가 싱글톤이 아닌 A (프로토 타입) bean 을 사용할 필요가 있다고 가정하십시오. 아마 각 메서드 호출은은 A에서 발생합니다. 컨테이너는 싱글톤 빈 A를 한 번만 생성하므로 프로퍼티를 설정할 수있는 기회도 한 번만 있습니다. 컨테이너는 빈 B가 필요할 때마다 b빈 B의 새 인스턴스를 가진 빈A를 제공 할 수 없습니다.
해결책은 제어의 역전(inversion of control)을 막는 것입니다. ApplicationContextAware
인터페이스 를 구현함으로써 빈 A가 빈B를 필요로 할 때마다 컨테이너가 (일반적으로 새로운) 빈 B 대한 getBean("B")
호출을 하게 함으로써 빈 A가 컨테이너 를 인식하게 할 수 있으며 다음 예제에서는이 접근 방식을 보여줍니다.
앞의 예제는 비즈니스 코드가 스프링 프레임 워크를 인식하고 결합하기 때문에 바람직하지 않습니다. Spring IoC 컨테이너의 다소 고급 기능인 메소드 삽입 (Method Injection)을 통해이 유스 케이스를 깔끔하게 처리 할 수있다.
이 블로그 엔트리 에서 Method Injection에 대한 동기를 더 읽을 수 있습니다 .
Lookup Method Injection