首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不添加Guice注释的Guice DI绑定

不添加Guice注释的Guice DI绑定
EN

Stack Overflow用户
提问于 2017-11-12 20:22:31
回答 1查看 617关注 0票数 3

我有一个usecase,我正在使用一个基于Spring的外部jar,而我的代码在Google上。

我试图通过编写模块将依赖项注入到依赖jar的这个类中。

外部类:

代码语言:javascript
复制
public class PTRS {
    @Inject
    private Event countEvent;
    @Inject
    private Event durationEvent;
    private GeoServiceClient gClient;
    public void setGeoServiceClient(GeoServiceClient client){this.gClient=client}

}

我能够在我的模块中设置带有setter的成员,但是@inject成员是空的,我正在为countEvent和durationEvent获得一个countEvent。

我的代码使用以下提供程序类创建一个对象,以便与PTRS类绑定。

代码语言:javascript
复制
@Provides
PTRS new PTRS(Client client){
PTRS ptrs = new PTRS();
ptrs.setGeoServiceClient(client);
return ptrs;
}

如何在不更改外部类的情况下注入这两个依赖项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-12 21:14:23

在Guice不创建的对象上注入一个MembersInjector来填充@Inject-annotated字段(并调用@Inject-annotated方法)。Guice在wiki中称这个词为“按需注射”,尽管我还没有在其他地方听说过这个词。

代码语言:javascript
复制
@Provides
PTRS newPTRS(Client client, MembersInjector<PTRS> ptrsInjector){
  PTRS ptrs = new PTRS();
  ptrsInjector.injectMembers(ptrs);    // <-- inject members here
  ptrs.setGeoServiceClient(client);
  return ptrs;
}

如果您可以访问Injector (它本身是可注入的),则可以直接调用injectMembers(Class),或者调用getMembersInjector来获取您选择的类型的MembersInjector实例。然而,这里的最佳实践是尽可能地插入一个窄的接口,以便清晰地阅读和易于嘲弄。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47253540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档