从init-method调用应用程序上下文

时间:2015-02-02 14:00:16

标签: spring

我有一个标准的'context-holder'bean(比方说MyContext)在我的spring配置文件中实现了ApplicationContextAware,而用init-method定义了另一个bean。

在init-method中,我调用MyContext.getApplicationContext().get("something"),但由于尚未设置应用程序上下文,因此我得到NullPointerException。 bean是一个集成测试。

我想问题是我使用init-method在bean之后定义了MyContext bean。是对的吗?我认为Spring应该足够聪明,以便首先设置上下文。

对于这样的情况有没有解决方案?我的意思是,当你用init-method调用应用程序上下文本身后,在任何其他bean之后定义了ApplicationContextAware bean?

顺便说一下Spring的流程是什么?我会接受一个答案,比如'Spring首先加载所有配置,然后创建所有bean实例,满足所有依赖项,调用所有init-methods,最后将应用程序上下文设置为ApplicationContextAware bean - 所以你不能使用init-methods中的应用程序上下文。

2 个答案:

答案 0 :(得分:0)

你应该使用@PostConstruct。带有此注释的方法将在收缩bean之后立即调用,但在任何地方使用之前都会被调用。

@PostConstruct
    public void afterInitMethod() throws Exception {
     //do you things there
    }

答案 1 :(得分:0)

是的,Spring提供了一种方法来告诉容器bean依赖于另一个bean,因此应该在它之后进行实例化。指定依赖关系后,列出bean文件中spring.xml定义的顺序无关紧要。

<bean id="dependentBean" class="com.my.app.DependentBean" depends-on="appContext" />

<bean id="appContext" class="com.my.app.MyContext" />