
[英]Other way to achive GWTP placeManager than Constructor's @Inject annotation
[英]Is it possible to use AssistedInject to inject members other than in the constructor?
我想做这样的事情:
@Inject private CollectorsListHolderFactory collectorsListHolderFactory;
private CollectorsListHolder collectorsListHolder;
private String projectName;
private NodeInfo node;
@Inject
public CollectorsRunner(@Assisted String projectName, @Assisted NodeInfo node) {
super();
this.projectName = projectName;
this.node = node;
collectorsListHolder = collectorsListHolderFactory.create(projectName, node);
}
但我收到NullPointerException
因为collectorsListHolderFactory
为null
。 是否可以在不使用构造函数的情况下注入该成员?
辅助注入很高兴像Guice的其余部分一样注入字段,但是它发生在调用构造函数之后 。 (毕竟,它需要先创建实例,然后才能设置其字段。)您可以执行以下操作:
private final String projectName;
private final NodeInfo node;
private CollectorsListHolder collectorsListHolder;
@Inject
public CollectorsRunner(@Assisted String projectName, @Assisted NodeInfo node) {
this.projectName = projectName;
this.node = node;
}
@Inject
void injectCollectorsListHolderFactory(CollectorsListHolderFactory factory) {
this.collectorsListHolder = factory.create(projectName, node);
}
但是,如果可以的话,应该完全避免使用公共可注入的构造函数 。
您尝试了以下吗?
private CollectorsListHolder collectorsListHolder;
private String projectName;
private NodeInfo node;
@Inject
public CollectorsRunner(@Assisted String projectName, @Assisted NodeInfo node,
CollectorsListHolderFactory collectorsListHolderFactory) {
super();
this.projectName = projectName;
this.node = node;
this.collectorsListHolder = collectorsListHolder;
}
您必须在模块中绑定collectorsListHolder才能正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.