注入和构造函数的CDI顺序

时间:2014-06-16 16:42:36

标签: java dependency-injection cdi

简单的问题,但我无法解决。据我所知,首先初始化字段,然后调用构造函数。

以下代码

public class Controller {

        @Inject
        private ReadCommand readCommand;

        public Controller() {
            if (readCommand==null){
                System.out.println("NO");
            }else{
                System.out.println("YES");
            }        
        }
}

打印NO。但是当我注入构造函数

@Inject
public Controller(ReadCommand readCommand)

打印出YES。我做错了什么?

1 个答案:

答案 0 :(得分:5)

你没有做错任何事。在注入过程中多次调用构造函数。只有在构建了字段后,才会将字段注入到托管bean中。进行构造函数级别注入时,构造函数需要读取:

private ReadCommand readCommand;

@Inject
public Controller(ReadCommand readCommand) {
    this.readCommand = readCommand;
    if(this.readCommand == null) {
        ...
    }
}