注入和构造函数的CDI顺序

1 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");
            }        
        }
}
Run Code Online (Sandbox Code Playgroud)

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

@Inject
public Controller(ReadCommand readCommand)
Run Code Online (Sandbox Code Playgroud)

它打印YES.我究竟做错了什么?

Joh*_*ent 5

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

private ReadCommand readCommand;

@Inject
public Controller(ReadCommand readCommand) {
    this.readCommand = readCommand;
    if(this.readCommand == null) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)