我有对象A
@Component("a")
Class A{
public SomeObject getC(){
return anObject;
}
}
我想在构建另一个对象B时使用
@Service("b")
Class B{
@Autowired
@Qualifier("a")
A a;
SomeObject c;
public B(){
c = a.getC();
}
其中a是数据库的连接器。基本上我想在初始化时从数据库加载对象c,之后仍然可以获得对数据库的更新。问题是我尝试这样做,我得到以下初始化错误。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name defined in file
Instantiation of bean failed;
Could not instantiate bean class
Constructor threw exception; nested exception is java.lang.NullPointerException
这是否可能,因为必须在构造对象B之前注入依赖项,或者我该怎么做?
答案 0 :(得分:2)
您的问题有两种解决方案。实际上,您可以在Spring中使用constructor injection,但您可能希望使用带注释的方法@PostConstruct
。它将在所有必要的注入发生之后但在bean投入使用之前执行(例如,通过使其可用于另一个bean或servlet),并且您可以执行任何您喜欢的代码,并且知道bean处于有效的构造状态。
@Service("b")
class B {
@Autowired
@Qualifier("a")
A a;
SomeObject c;
public B(){}
@PostConstruct
private void initializeSomeObject() {
c = a.getSomeObject();
}
}
答案 1 :(得分:1)
首先创建Bean,然后注入其依赖项,这就是您获得NullPointerException的原因。试试这个:
@Service("b")
Class B{
A a;
SomeObject c;
@Autowired
@Qualifier("a")
public B(A a){
this.a = a;
c = a.getC();
}
}