首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无喷射器的guice进样

无喷射器的guice进样
EN

Stack Overflow用户
提问于 2019-05-08 19:18:34
回答 1查看 580关注 0票数 0

下面是我的模块类

代码语言:javascript
运行
复制
public class ABCModule extends AbstractModule {

    @Override
    protected void configure() {
        install(new JpaPersistModule(Configuration.get("error-persister")));
        bind(DBService.class).to(DBServiceImpl.class).in(Singleton.class);
        bind(DBRepository.class).to(DBRepositoryImpl.class).in(Singleton.class);
    }

    @ProvidesIntoOptional(ProvidesIntoOptional.Type.ACTUAL)
    public ErrorHandler getErrorHandler() {
        return new ABCHandler();
    }
}

而ABCHandler有

代码语言:javascript
运行
复制
private final DBService dbService;

@Inject
public ABCHandler() {
    Injector injector = Guice.createInjector(new ABCModule());
    injector.getInstance(PersistenceInitializer.class);
    this.dbService = injector.getInstance(DBService.class);
}

@Override
public void handle() {
    dbService.store("abc");
}

创建ABCModule实例并将其传递给某个通用模块。正如您所看到的,ABCModule提供了ABCHandlerABCHandler再次使用ABCModule来创建注入器和服务实例。它可以工作,但我知道它是不正确的。Module被调用两次。如何在不使用注入器或创建模块实例的情况下在ABCHandler中注入dbService。我不想仅仅为了创建实例而创建一个虚拟的空模块。你能建议一下。如果我只在dbService上使用@Inject而不使用注入器,那么它就是null。我在Module中使用Provider,可以为dbService做类似的事情吗?或任何其他解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 20:17:37

DbService已经是可注入的,您可以在getErrorHandler方法中传递它

代码语言:javascript
运行
复制
  @ProvidesIntoOptional(ProvidesIntoOptional.Type.ACTUAL)
  public ErrorHandler getErrorHandler(DBService dbService) {
    return new ABCHandler(dbService);
  }

在这种情况下,可以将ABCHandler构造函数更改为

代码语言:javascript
运行
复制
  @Inject
  public ABCHandler(DBService dbService) {
    this.dbService = dbService;
  }

更多详细信息可以在这里找到Accessing Guice injector in its Module?

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

https://stackoverflow.com/questions/56039552

复制
相关文章

相似问题

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