【发布时间】:2010-01-24 19:11:32
【问题描述】:
我想在启动后以工厂模式创建一些 spring bean。例如,我经常有一些工作要做,我需要创建一个任务 bean(它可能依赖于其他单例 spring bean)并执行它。
可能有多个工作要同时执行,因此每个任务 bean 都需要是独立的(原型)。
人们有什么共同的模式来实现这一点吗?
在我看来,我需要以某种方式与 container/applicationContext 交互,但我真的不想分散 applicationContext/beanFactory 的注入和对 getBean("...") 的调用。
我想到了类似的东西(注意“工厂”是我想象的东西,而不是存在的东西)
<bean id="myTask" class="MyTask" scope="prototype">
<property name="entityManager" ref=".../>
...
</bean>
<bean id="myTaskExecutor" class="MyTaskExecutor">
<property name="taskFactory">
<xxx:factory bean="myTask"/>
</property>
</bean>
然后编码
class MyTaskExecutor
{
private Factory<MyTask> taskFactory;
public void setTaskFactory( Factory<MyTask> taskFactory )
{
this.taskFactory = taskFactory;
}
}
也许还有注释版本
class MyTaskExecutor
{
@Factory(MyTask.class)
private Factory<MyTask> taskFactory;
}
也许上面已经有类似的东西了?还是我在某处遗漏了一些基本的东西。
我意识到我可以有一个单例 MyTaskFactory 并使用它来使用“new”进行实例化,但是我必须从工厂传递它的所有依赖项,这感觉不对。
所以我想总结的问题是
在应用程序代码中按需创建原型 Spring bean 的推荐方法是什么?
感谢任何意见。
【问题讨论】: