Java 使用@Lookup、Provider或injecting ApplicationContext有区别吗?

Java 使用@Lookup、Provider或injecting ApplicationContext有区别吗?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我想将原型bean注入到一个singleton工厂中。 我们正在考虑4种选择,希望有人能强调其中的差异 根据我的个人喜好分类: 使用@lookup方法注释(我们使用基于代码的配置) @Autowireda(每个bean一个)和每种类型的get() 从应用程序中的任何位置提供对ApplicationContext.getBean()的静态访问,并从那里提供对getBean()的静态访问 注入ApplicationContext,并getBean() 我知道getBean(),但出于某种原因,我看到

我想将原型bean注入到一个singleton工厂中。 我们正在考虑4种选择,希望有人能强调其中的差异

根据我的个人喜好分类:

  • 使用
    @lookup
    方法注释(我们使用基于代码的配置)
  • @Autowired
    a(每个bean一个)和每种类型的
    get()
  • 从应用程序中的任何位置提供对
    ApplicationContext.getBean()
    的静态访问,并从那里提供对
    getBean()
    的静态访问
  • 注入ApplicationContext,并
    getBean()
  • 我知道
    getBean()
    ,但出于某种原因,我看到很多答案都是这样的


    (选项2和选项3之间的最大区别是什么?

    3可能会让你陷入噩梦,但不应该成为现实。4很接近,但是很蹩脚。@MarkoTopolnik-感觉确实不对&脏,但我需要一个真正的解释为什么我们必须销毁这段代码。我的问题是从哪里开始。全局变量总是不好的,因为您完全无法控制它们的使用范围;将ApplicationContext作为全局文件公开尤其令人厌恶,因为它是整个应用程序的核心:现在,任何地方的任何代码都可以随心所欲地处理它。IoC代表控制反转;使用此选项可以撤消反转。对于你的应用程序来说,容器只是一包东西,你可以在任何时候随心所欲地把东西拿进拿出。@MarkoTopolnik但是javax提供程序不也是这样做的吗?
    提供程序
    是一个注入到你的对象中的依赖项,它允许你解决它提供的对象和你的对象之间的生命周期不匹配问题。它就像一个定制的工厂对象。这与返回整个ApplicationContext的全局静态方法截然不同。