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();
    }
}

谢谢,这是有效的,但它只是自动连接,在构造函数之前没有限定符注释。