Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以获得包含类(CDI)的引用?_Java_Cdi_Weld_Jboss Weld_Weld2 - Fatal编程技术网

Java 是否可以获得包含类(CDI)的引用?

Java 是否可以获得包含类(CDI)的引用?,java,cdi,weld,jboss-weld,weld2,Java,Cdi,Weld,Jboss Weld,Weld2,我的设置如下- public class ParentModel { private StatusModel sm; } StatusModel类别如下- public class StatusModel { private ParentModel pm; public void setParentModel(ParentModel pm) { this.pm = pm; } } pm = factory.get(); pm.setters.

我的设置如下-

public class ParentModel {
    private StatusModel sm;
}
StatusModel
类别如下-

public class StatusModel {
    private ParentModel pm;

    public void setParentModel(ParentModel pm) {
        this.pm = pm;
    }
}
pm = factory.get();
pm.setters...
pm.getSm().setParentModel(pm);//<----- is it possible to avoid this?
pm
inside
StatusModel
ParentModel
实例的引用,StatusModel依赖于该实例

内部
dao
-我正在注入
ParentModel
,如下所示

@Inject
private Instance<ParentModel> factory;

我们是否可以在不调用方法的情况下获得
sm
中的
pm
引用?

取决于哪个对象可能处于未完全初始化的状态,将该对象作为构造函数参数注入另一个对象,并在那里调用setter。解析后一个对象时,整个对象层次结构将保持一致:

class ParentModel {
    StatusModel _status;
    ParentModel(@Inject StatusModel status) {
        _status = status;
        _status.setParent(this);
    }
}

class StatusModel {
    ParentModel _parent;
    void setParent(ParentModel parent) { _parent = parent);
}


这就是说,我建议打破这种循环依赖关系,因为这样你就可以恢复设计中一个不可能构造无效对象的宜人属性。

这是一种循环依赖关系,DI容器没有明确的方法来正确确定创建对象的顺序。横向建议:不要;相反,将
StatusModel
需要的功能提取到一个新类中,您可以将它和
ParentModel
都注入到该类中。