容器只创建JobListener
一次单例 bean,因此只有一次机会设置属性。容器不能在每次需要时为 beanJobListener
提供一个新的 bean 实例。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 框架将生成一个动态子类,JobListener
该子类将覆盖该方法以在每次请求时createHelper
提供一个新实例。Helper
您需要lookup-method
在JobListener
bean 定义中定义 name 的名称:
<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
.