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

以下代码

public class Controller {

        @Inject
        private ReadCommand readCommand;

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


打印编号但是当我注入构造函数

@Inject
public Controller(ReadCommand readCommand)


它打印是。我究竟做错了什么?

最佳答案

你没做错什么在注入过程中,构造函数被多次调用。仅在构造完字段之后,才将字段注入到托管bean中。在进行构造函数级注入时,构造函数需要读取:

private ReadCommand readCommand;

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

关于java - CDI注入(inject)顺序和构造方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24248449/

10-11 04:09