Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bean在实例化时填充,但在销毁时其字段为空_Java_Spring_Tomcat_Configuration_Dependency Injection - Fatal编程技术网

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

Java Bean在实例化时填充,但在销毁时其字段为空,java,spring,tomcat,configuration,dependency-injection,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 Excepti

我有一门课是这样的:

    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());
}
它通过my 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>

org.springframework.web.context.ContextLoaderListener
上下文配置位置
类路径:applicationContext-loader.xml
应用程序上下文有以下行:

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

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



啊,达尼特,应该再挖一点。在我不熟悉的一段代码中,它被清除了,我最终找到了它

就我所知,您确定它是同一个
加载程序的实例吗?@axtavt。我可以确定吗?这个类是可变的吗?某个东西是否可以在某个时刻将
c1
c2
设置为
null
?将其哈希代码记录在构造函数中并
destroy()
System.identityHashCode()
,如果
hashcode()
被覆盖)。@axtaxt我设法找到了答案。在我不熟悉的一段代码中,它被清除了,我最终找到了它。