컨테이너는 단 하나의 빈인 JobListener
만 생성하므로 속성을 설정할 기회가 하나뿐납니다. 컨테이너가 필요할 때마다 bean JobListener
에 bean Helper
의 새 인스턴스를 제공 할 수 없습니다.
Method Injection
: Lookup method injection
은 컨테이너가 컨테이너 관리 Bean의 메소드를 대체하여 컨테이너의 다른 명명 된 Bean에 대한 검색 결과를 리턴하는 기능입니다.
public abstract class JobListener {
@ServiceActivator
public void receiveMessage(Message<String> message){
Helper helper = createHelper();
helper.processMassage(message);
}
protected abstract Helper createHelper();
}
스프링 프레임 워크는 Helper
의 새로운 인스턴스 그것을가 요청 될 때마다 시간을 제공하기 위해 createHelper
메소드를 오버라이드 (override) 할 JobListener
의 동적 서브 클래스를 생성합니다 :이 솔루션을 구현하기 위해이 같은 JobListener
클래스를 재 - 정의 . 당신이
Helper helper = createHelper();
을 실행 그것은 당신에게 새로운을 반환 장소에 위의 구성으로
<bean id="helper" class="x.y.Helper" scope="prototype">
...
</bean>
<bean id="jobListener" class="x.y.JobListener">
<lookup-method name="createHelper" bean="helper"/>
</bean>
, 모든 시간 :
당신은 JobListener
빈 정의에 lookup-method
이름의 이름을 정의해야 Helper
의 인스턴스입니다.
빠른 응답, 아니요, 스프링 프레임 워크로 JobListener를 만들면 클래스 생성시 헬퍼를 자동으로 실행하지만 도우미에 대한 참조가있는 다른 클래스는 다른 인스턴스 – RamonBoza
을 수신합니다. receiveMessage'helper = (Helper) context.getBean ("helper"); ' – RamonBoza