是否有可能获得含有类(CDI)的参考?

时间:2017-11-22 09:55:57

标签: 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内的StatusModelParentModel取决于StatusModel实例的引用。

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

@Inject
private Instance<ParentModel> factory;

但是,使用单独的方法调用设置ParentModelStatusModel的引用,如下所示 -

pm = factory.get();
pm.setters...
pm.getSm().setParentModel(pm);//<----- is it possible to avoid this?

我们可以在没有方法调用的情况下获取pm内的sm引用吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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