我想在启动后以工厂模式创建一些 spring beans。例如,我经常有一些工作要做,并且需要创建一个任务 bean(它可能依赖于其他单例 spring bean)并执行它。
可能有多个工作要同时执行,因此每个任务 bean 都需要是独立的(原型)。
人们是否使用任何通用模式来实现这一目标?
正如我所见,我需要以某种方式与容器/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 的推荐方法是什么?
感谢任何输入。