是否可以获得包含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
中的 pm
是 StatusModel
所依赖的 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);
}
就是说,我建议打破这种循环依赖关系,因为这样你就可以恢复一个不错的 属性 设计,其中不可能构造无效对象。
我的设置如下 -
public class ParentModel {
private StatusModel sm;
}
StatusModel
class 如下 -
public class StatusModel {
private ParentModel pm;
public void setParentModel(ParentModel pm) {
this.pm = pm;
}
}
StatusModel
中的 pm
是 StatusModel
所依赖的 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);
}
就是说,我建议打破这种循环依赖关系,因为这样你就可以恢复一个不错的 属性 设计,其中不可能构造无效对象。