1

我有对象 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 之前注入依赖项,或者我将如何做到这一点?

4

2 回答 2

2

您的问题有两种解决方案。实际上,您可以在 Spring 中使用构造函数注入,但您可能希望使用 annotated 方法@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();
    }
}
于 2013-08-01T23:23:21.227 回答
1

首先创建 Bean,然后注入它的依赖项,这就是你得到 NullPointerException 的原因。尝试这个:

@Service("b")
Class B{

    A a;

    SomeObject c;

    @Autowired
    @Qualifier("a")
    public B(A a){
        this.a = a;
        c = a.getC();
    }
}
于 2013-08-01T23:04:39.697 回答