繁体   English   中英

是否可以使用AssistedInject注入除构造函数以外的成员?

[英]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因为collectorsListHolderFactorynull 是否可以在不使用构造函数的情况下注入该成员?

辅助注入很高兴像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才能正常工作。

您可以尝试对jice (如mycila或其他)使用JSR-250扩展名,并使用@PostConstruct批注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM