Java 有没有办法注入依赖项以便在构造函数中使用?
我有一个目标Java 有没有办法注入依赖项以便在构造函数中使用?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我有一个目标 @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是数据库的连接器。基本
@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之前注入依赖项,或者我将如何做到这一点?首先创建bean,然后注入其依赖项,这就是为什么要获得NullPointerException。试试这个:
@Service("b")
Class B{
A a;
SomeObject c;
@Autowired
@Qualifier("a")
public B(A a){
this.a = a;
c = a.getC();
}
}
你的问题有两种解决办法。实际上,您可以与Spring一起使用,但您可能希望使用带注释的方法
@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();
}
}
谢谢,这是有效的,但它只是自动连接,在构造函数之前没有限定符注释。