是否可以获得包含class(CDI)的参考?

Is it possible to obtain a reference of containing class (CDI)?

我的设置如下 -

public class ParentModel {
    private StatusModel sm;
}

StatusModel class 如下 -

public class StatusModel {
    private ParentModel pm;

    public void setParentModel(ParentModel pm) {
        this.pm = pm;
    }
}
StatusModel 中的

pmStatusModel 所依赖的 ParentModel 实例的引用。

dao 内部 - 我正在如下注射 ParentModel

@Inject
private Instance<ParentModel> factory;

但是,使用如下单独的方法调用将 ParentModel 引用设置为 StatusModel -

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

我们可以在不调用方法的情况下获取 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);
}

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