【问题标题】:How to inject spring bean (prototype scope) dynamically如何动态注入spring bean(原型范围)
【发布时间】:2012-11-23 19:59:03
【问题描述】:

我正在使用 Spring 3.1.1,在我的业务逻辑中,我有一个循环,每次迭代都需要一个新的 spring bean 实例(原型范围)。

最好的方法是什么?我必须创建自己的 BeanFactory 类,我可以将其注入到我的类中,并且每次都调用它以根据请求生成 bean?查看Spring 3 docs 时,似乎暗示我应该改用ApplicationContext。但是,使用 ApplicationContext 会使我的代码依赖于 Spring。

这样的最佳方法是什么? Spring 是否已经提供了我可以利用的各种工厂?

【问题讨论】:

  • lookup method 呢?
  • 完美。正是我想要的。现在回想起来,我记得几年前用过它,但不记得它是什么了。

标签: java spring dependency-injection factory


【解决方案1】:

ApplicationContext 工厂。您不必将其注入您的班级;您实例化一个并使用它来创建 bean 并连接它们的依赖项。

我不明白“使用 ApplicationContext 使我的代码依赖于 Spring”的评论。是的,它确实。你认为 DI 值不值得?

【讨论】:

  • DI 绝对值得。但 Spring 并不是唯一存在的 DI 容器。
  • 没有人说它是。这个问题专门针对 Spring。
  • 触摸。在我看来,很明显我正在寻找一个独立于容器的解决方案,但我从未在问题中明确表示过。发送。
  • 我认为独立于容器的解决方案是不可能的,除非您竭尽全力包装所有内容并向您自己隐藏它是 Spring 或 Guice 的事实。就个人而言,我不明白这一点。
【解决方案2】:

我认为你应该和春天一起去。 Spring 满足您的需求。您可以使用一种方法从应用程序上下文中查找特定类型的 bean。因此,如果您将该 bean 设为原型。那么当你调用这个特殊方法时,你会得到一个你想要的bean的新实例。

你会发现它的详细信息here!

【讨论】:

  • 当您发现自己发布了以“我认为您应该接受”开头的“答案”时,发表评论
  • 我认为您以某种方式错过了问题的关键点,因为问题是在寻求建议!所以没有什么是绝对正确或可用的。根据上下文和有用性,我们必须选择一种方法!这就是为什么答案是这样开始的!并感谢您的建议!
【解决方案3】:

您可以使用自定义范围并使注入bean代理,并在自定义范围bean上监听一些可以注入底层代理bean的动态事件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2011-05-06
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2012-01-22
    • 2017-02-27
    相关资源
    最近更新 更多