AHu*_*ist 6 java configuration spring tomcat 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();
}
}
Run Code Online (Sandbox Code Playgroud)
它在@Configuration类中创建为@Bean.
@Bean(autowire = Autowire.BY_NAME, name = "loader")
public Loader getLoader() {
return new Loader(getC1(), getC2());
}
Run Code Online (Sandbox Code Playgroud)
它通过我的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>
Run Code Online (Sandbox Code Playgroud)
该应用程序上下文具有以下行:
<context:component-scan base-package="name.of.package.loader.is.in" />
Run Code Online (Sandbox Code Playgroud)
我在tomcat中启动war时在构造函数中放置了一个断点,我可以验证c1和c2是否按预期填充.但是,当我关闭tomcat并进入destroy方法时,c1和c2都为null,因此抛出了NPE.为什么这些价值不再存在?
啊,darnit,应该进一步挖掘.它在我不熟悉的代码部分被清除,我终于找到了它.