Bean在实例化时填充,但在销毁时其字段为空

时间:2012-05-04 18:29:14

标签: java spring tomcat configuration dependency-injection

我有一个这样的课程:

    public class Loader implements DisposableBean { 

        Class1 c1;
        Class2 c2;

        Loader(Class c1, Class c2) {
          this.c1 = c1;
          this.c2 = c2; 
    }
    @Override
    public void destroy() throws Exception {
        c1.do();
        c2.do();
    }
}

它在@Configuration类中创建为@Bean。

@Bean(autowire = Autowire.BY_NAME, name = "loader")
public Loader getLoader() {
    return new Loader(getC1(), getC2());
}

它通过我的web.xml中的上下文加载器侦听器实例化

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-loader.xml</param-value>
</context-param>

该应用程序上下文包含以下行:

<context:component-scan base-package="name.of.package.loader.is.in" />

我在tomcat中启动war时在构造函数中放置了一个断点,我可以验证c1和c2是否按预期填充。但是,当我关闭tomcat并进入destroy方法时,c1和c2都为null,因此抛出了NPE。为什么这些价值不再存在?


啊,darnit,应该再挖一下。它在我不熟悉的代码部分被清除,我终于找到了它。

0 个答案:

没有答案