[英]Spring prototype scope with autowired
我有一個使用Spring Integration監聽隊列的JobListener
類。 在JobListener
,我有一個Autowired
字段Helper
其范圍被定義為“prototype”。
public class JobListener {
@Autowired
private Helper helper;
@ServiceActivator
public void receiveMessage(Message<String> message){
helper.processMassage(message);
}
}
現在的問題是,由於助手的范圍被定義為Protype
,每次我會得到幫助的新實例recieveMessage
叫?
容器只創建一次單獨的bean JobListener
,因此只有一次機會來設置屬性。 容器不能提供豆JobListener
豆的一個新實例Helper
每次需要一個時間。
此問題的一個解決方案是使用Method Injection
: Lookup method injection
是容器覆蓋容器托管bean上的方法的能力,以返回容器中另一個命名bean的查找結果。 要實現此解決方案,請按以下步驟重新定義JobListener
類:
public abstract class JobListener {
@ServiceActivator
public void receiveMessage(Message<String> message){
Helper helper = createHelper();
helper.processMassage(message);
}
protected abstract Helper createHelper();
}
Spring Framework將生成一個JobListener
的動態子類,它將覆蓋createHelper
方法,以便在每次請求時提供Helper
的新實例。
您需要在JobListener
bean定義中定義lookup-method
名稱:
<bean id="helper" class="x.y.Helper" scope="prototype">
...
</bean>
<bean id="jobListener" class="x.y.JobListener">
<lookup-method name="createHelper" bean="helper"/>
</bean>
每次執行時都有上述配置
Helper helper = createHelper();
它會返回一個新的Helper
實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.