首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧自动示波器

弹簧自动示波器
EN

Stack Overflow用户
提问于 2013-10-24 07:29:09
回答 1查看 8.1K关注 0票数 5

我有一个类JobListener,它使用Spring侦听队列。在JobListener中,我有一个Autowired字段Helper,其作用域被定义为"prototype“。

代码语言:javascript
复制
public class JobListener {

@Autowired
private Helper helper;

@ServiceActivator
public void receiveMessage(Message<String> message){
    helper.processMassage(message);
    }
}

现在我的问题是,既然Helper的作用域被定义为Protype,那么每次调用recieveMessage时,我会得到一个helper的新实例吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 08:13:42

容器只创建一次单例bean JobListener,因此只能获得一次设置属性的机会。容器不能每次需要bean JobListener时都为bean Helper提供一个新实例。

解决此问题的一个解决方案是使用Method InjectionLookup method injection是容器能够覆盖容器托管bean上的方法,返回容器中另一个名为bean的查找结果。要实现此解决方案,请将JobListener类重新定义为:

代码语言:javascript
复制
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 bean定义中定义JobListener名称:

代码语言:javascript
复制
<bean id="helper" class="x.y.Helper" scope="prototype">
...
</bean>

<bean id="jobListener" class="x.y.JobListener">
<lookup-method name="createHelper" bean="helper"/>
</bean>

在上述配置就位后,每次执行

代码语言:javascript
复制
Helper helper = createHelper();

它将返回Helper的一个新实例。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19559620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档