Java-Guice:强制将绑定作为提供程序注入

我正在寻找一种强制某些Guice绑定仅作为提供程序注入的方法.例如,当有类似

interface ResultLogger {
    void log(String resultAsString);
}

class ResultLoggerProvider implements Provider<ResultLogger> {
    // ...
}

class ResultDisplayModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(ResultLogger.class).toProvider(ResultLoggerProvider.class);
    }
}

我想有办法配置我的模块,这样一个类

@Singleton
class ResultParser {
    private final Provider<ResultLogger> loggerProvider;

    @Inject
    public ResultParser(Provider<ResultLogger> loggerProvider) {
        this.loggerProvider = loggerProvider;
    }
}

可以很好地注入,但是像

@Singleton
class ResultParser {
    private final ResultLogger resultLogger;

    @Inject
    public ResultParser(ResultLogger resultLogger) {
        this.resultLogger = resultLogger;
    }
}

应该抛出RuntimeException来通知开发人员ResultLogger仅可通过提供程序使用.理想情况下,应尽快抛出该异常,例如在喷油嘴的构造过程中.我正在寻找一种简单的方法来使用Guice 3.0中的现有API来实现这一目标.

解决方法:

也许您根本不应该实施Provider,而只是

@Singleton
public class ResultLoggerProvider {
   public ResultLogger get() {...}
   // ...
}

@Singleton
class ResultParser {
   private final ResultLoggerProvider loggerProvider;

   @Inject
   public ResultParser(ResultLoggerProvider loggerProvider) {
      this.loggerProvider = loggerProvider;
   }
}

并删除其他绑定.

上一篇:How Do I test James Distributed Version with JMeter?


下一篇:Google Guice之牛刀小试