2014-02-27 49 views
0

我刚刚阅读了关于构造函数和setter依赖注入的Spring文档。 但是,DI的整个概念仍然让我困惑不已。特别是,这个过程似乎仍然相当有限或受限于我。Spring重新注入概念

我明白第三方(Spring)的想法,它可以完全分配和连接对象的依赖关系。但是如果我们只通过构造函数(初始化时间)和设置器(初始化然后做一些属性设置)来提供依赖关系,那么我们以后如何重新配置​​或重新注入新的bean?

我的意思是例如豆A有豆的参考B。通过构造函数或setter注入,我们可以像从文档中知道的那样执行操作。但是如果后来在应用程序中我们需要bean A来获得对其他对象/ bean C的引用呢?

我们是否需要从新的Spring XML配置文件或其他方法加载新的应用程序上下文?该操作可能会执行多次,所以它应该很容易配置。有一件事我很惊讶,在Spring DI的大多数教程和解释中都没有提到这样的常见任务。也许我需要其他关键字(目前我正在使用Spring重新注入)。

回答

0

您可以在

private ApplicationContext context; 

public void setApplicationContext(ApplicationContect context) { 
    this.context = context; 
} 

注入的ApplicationContext,那么你将有权在任何时候

... 
    C c =context.getBean(C.class); 
... 
0

访问任何豆无论你在你的应用程序需要的ApplicationContext,实现与ApplicationContextAware接口类。

这里说

public class CalenderService implements ApplicationContextAware{ 

    private ApplicationContext context;//declare this so you can use it 

} 

因为它是你需要在此改变其方法

public void setApplicationContext(ApplicationContext context){ 
    this.context=context; // here ApplicationContext gets injected. 
} 

,并使用此背景下,无论你想接口。

0

上下文驱动的框架如Guice,HK2或CDI倾向于在注入服务时使用代理服务,这些服务的生命周期与注入服务的生命周期不同。然后,当服务在代理下发生变化时,代理只查找新实例并将其用于后续调用。还有其他的原因,像这样的框架使用代理,例如为了避免昂贵的初始化成本的服务。