【发布时间】:2013-12-19 08:32:18
【问题描述】:
我有一个使用 Spring IoC 进行依赖注入的项目,我试图通过一个中心位置来访问我的大部分 bean,从而稍微简化我的模型。
我在使用@PostConstruct 机制或实现InitializingBean 接口时遇到了问题。虽然该特定 bean 中的所有依赖关系可能都已解决,但注入 bean 中的依赖关系可能尚未解决。例如我有:
public class A {
public void doSomething() {};
}
public class B {
private A objectA;
@Required
public void setObjectA(A objectA) {
this.objectA = objectA;
}
public A getObjectA() {
return objectA;
}
}
public class C implements InitializingBean {
private B objectB;
@Required
public void setObjectB(B objectB) {
this.objectB = objectB;
}
public void afterPropertiesSet() throws Exception {
objectB.getObjectA().doSomething();
}
}
我的 context.xml 文件定义了这三个 bean 并注入了适当的属性,但是当 C 类的对象被实例化并调用 afterPropertiesSet 方法时,我得到了 NullPointerException,调试显示对 @ 的调用987654326@ 返回null。如果我将对象 A 直接注入到类 C 中,则不会出现错误。
我是否可以使用一种机制来确保在我的 afterPropertiesSet 方法/任何带有 @PostConstruct 注释的方法被调用之前已完全实例化所有 bean?
谢谢,
约瑟夫。
【问题讨论】:
-
“虽然该特定 bean 中的所有依赖关系可能已解决,但注入 bean 中的依赖关系可能尚未解决。”是什么让你得出这个结论?在您的情况下,C 需要 B,而 B 又需要 A。因此,当创建 C 的实例时,您将拥有 B 的实例以及已经创建的 A。