编译时编织并在构造函数上自动装配

时间:2011-01-11 15:39:30

标签: java spring dependency-injection

@Configurable
public TestClass(){

@Autowired SomeOtherClass otherClass;

public TestClass(Var1 var){

System.out.println(otherClass);

}


}

我使用编译时编织并调用new testClass(var)。我在构造函数上使用依赖注入,如上面的“otherClass”。它打印出'null'。从我的测试中,依赖注入'otherClass'无法在构造函数中初始化。我该怎么做才能允许依赖注入“构造函数”?

3 个答案:

答案 0 :(得分:1)

请查看Spring文档的this部分中的注释。

它显示了@Configurable属性,用于在构造函数中的代码之前强制注入。

@Configurable(preConstruction=true)

将该属性添加到上面的代码中会使System.out.println(otherClass);停止为null

答案 1 :(得分:0)

我猜(但不知道100%)Autowirering在创建对象后发生。 (我的意思是我知道正常的Spring Bean,普通的类,但@Configurable 不是100%)

这意味着您无法期望在创建对象时已经填充了Autowired字段。

如果添加在创建后调用的第二个方法printStats,则可以检查此项。

public class TestClass {
  ...
   public void printStats(){
     System.out.println(otherClass);
   }
}

...
new TestClass(var).printStats();

答案 2 :(得分:0)

支持拉尔夫的答案。

来自Spring Autowired文档。

  

在构造bean之后立即注入字段,然后调用任何配置方法。

HTH