2

我的设置如下 -

public class ParentModel {
    private StatusModel sm;
}

StatusModel类如下 -

public class StatusModel {
    private ParentModel pm;

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

pminside是依赖的实例StatusModel的引用。ParentModelStatusModel

里面dao- 我注射ParentModel如下

@Inject
private Instance<ParentModel> factory;

但是,设置ParentModel参考StatusModel使用单独的方法调用如下 -

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

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

4

1 回答 1

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);
}

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

于 2017-11-22T10:50:05.660 回答