Java 在不是由SpringContainer管理的对象中使用Springbean的正确方法是什么?

Java 在不是由SpringContainer管理的对象中使用Springbean的正确方法是什么?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我有一个Springbean(单例范围,如果它重要的话),让我们称它为FooService 我有一个对象栏,它不是由Spring管理的,但它想使用FooService 如何以最佳方式实施这一合作?(假设我不喜欢使用applicationContext.getBean())的解决方案。在Bar构造函数中调用“new”,并创建FooService实例供其使用。Springbean理想情况下是一个普通的旧Java对象或POJO。如果它不是Spring管理的,那么您必须自己管理它。理想情况下,调用new

我有一个Springbean(单例范围,如果它重要的话),让我们称它为FooService

我有一个对象栏,它不是由Spring管理的,但它想使用FooService


如何以最佳方式实施这一合作?(假设我不喜欢使用
applicationContext.getBean()
)的解决方案。

在Bar构造函数中调用“new”,并创建FooService实例供其使用。

Springbean理想情况下是一个普通的旧Java对象或POJO。如果它不是Spring管理的,那么您必须自己管理它。理想情况下,调用
new
,或者类似于
getInstance
的方法,然后自己跟踪引用。

谁在构建
实例?你没提到这个

如果
Bar
实例需要
FooService
,则必须使用构造函数或setter注入将后者注入
Bar

如果希望
FooService
由Spring管理,而不是由Bar管理,那么您实际上只有几个选项:

  • 在构造
    实例的代码中,从应用程序上下文向其传递对
    FooService
    的引用
  • 同样简单-使用Spring来管理
    Bar
    实例的生命周期

  • 如果您希望在不是由IoC容器创建的对象中注入依赖项,那么AOP是一个选项。看看Spring的
    @可配置的
    ——我想粘贴一个指向该主题的堆栈溢出问题的链接,但我的剪切粘贴当前已损坏。

    FooService应该是单例的(它是无状态的,我不需要多个实例)。@Roman-随便。只需在Bar对象中有一个子引用,并将适当的引用分配给FooService。请参阅: