加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 使用spring按需创建bean

发布时间:2020-12-15 01:44:53 所属栏目:大数据 来源:网络整理
导读:我想在工厂模式启动后创建一些spring bean.例如,每隔一段时间我就有一些工作要做,我需要创建一个任务bean(可能对其他单例spring bean有依赖)并执行它. 可能有多个工作要同时执行,因此每个任务bean都需要独立(原型). 人们用它来实现这个目标吗? 正如我所看到

我想在工厂模式启动后创建一些spring bean.例如,每隔一段时间我就有一些工作要做,我需要创建一个任务bean(可能对其他单例spring bean有依赖)并执行它.

可能有多个工作要同时执行,因此每个任务bean都需要独立(原型).

人们用它来实现这个目标吗?

正如我所看到的,我需要以某种方式与容器/ applicationContext进行交互,但我真的不想分散对applicationContext / beanFactory的注入并且到处调用getBean(“…”).

我想到了这样的事情(注意“工厂”是我想象的东西,而不是存在的东西)

然后是代码

class MyTaskExecutor
{
  private Factory

也许是一个注释版本

class MyTaskExecutor
{
  @Factory(MyTask.class)
  private Factory

也许有类似上面的东西?或者我错过了一些基本的东西.

我意识到我可以有一个单独的MyTaskFactory并使用它来实例化使用“new”然后我必须从工厂传递所有它的家属感觉不对.

所以我想总结一下这个问题

从应用程序代码中按需创建原型spring bean的推荐方法是什么?

感谢任何输入.

最佳答案
我认为你的问题太复杂了.您需要做的就是编写一个TaskFactory类(没有什么特别之处,没有特殊的接口或注释). TaskFactory将注入所需的所有其他bean,并且将具有createTask方法,该方法按需创建任务,并在创建时将对所需Spring bean的引用传递给新任务.客户端代码使用TaskFactory注入,并在需要时调用createTask.

Spring本身并没有为你要做的事情提供明确的支持.工厂方法XML属性和FactoryBean接口之类的东西仅适用于在其范围内一次性创建bean,如果您想按需创建它们,这意味着scope =“prototype”,这意味着使用getBean( ).

编辑:值得指出的是,原型范围的bean真的不是Spring的设计目标.是的,它支持它们,但使用它们并不是一种非常有启发性的体验.如果你真的想走这条路,那么它的价值是taking a look at @Configurable.由于运行时类加载器的限制,它非常强大,但并不总是合适.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读