java - 使用 Guice 设置属性的正确方法是什么?

标签 java dependency-injection guice

假设我们有 2 个类 - MainMainDependency。第二个类仅由 Main 使用,使用 IoC 的目的是构造 Main 类的实例。

MainDependency 类有一个整数类型的字段。不需要设置此字段(或者,我们假设如果未指定任何其他内容,它应该始终具有默认值)。

问题:设置整数字段最正确的方法是什么?我看到的一种方法是在我的 Module 中创建类似的字段,然后在 configure 模块中使用该值。但我觉得这是一个错误的方式。

请分享您的经验。提前谢谢。

最佳答案

我认为你主要有两个选择:

1) 使用常量绑定(bind)注入(inject)它。 MY_CONSTANT 的值可以在实例化时传递给 Module;可以从系统属性或其他方式获取。

class MainDependency{
  @Inject
  public MainDependency(@Named("myConst") int myConst){
    //...
  }
}

class Module extends AbstractModule{
  public void configure(){
    bindConstant().annotatedWith(Names.named("myConst").to(MY_CONSTANT);
  }
}

2) 使用辅助注入(inject)创建一个工厂,该工厂会将您的值作为参数并返回 MainDependency 的实例:

interface MainDependencyFactory{
  MainDependency create(int myConst);
}

class MainDependency{
  @Inject
  public MainDependency(@Assisted int myConst){
    //..
  }
}

class Module extends AbstractModule{
  public void configure(){
    bind(MainDependencyFactory.class).toProvider(
      FactoryProvider.newFactory(MainDependencyFactory.class, MainDependency.class));
  }
}

//to use the above, instantiate your factory (or inject it somewhere)
MainDependencyFactory f = injector.getInstance(MainDependencyFactory.class);
//Then you can create MainDependency with any value
MainDependency md = f.create(MY_CONSTANT);

请注意,使用辅助注入(inject),您不需要实现 MainDependencyFactory。 Guice 将为您创建它。

关于java - 使用 Guice 设置属性的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545562/

相关文章:

java - 相当于 Java 中的 openssl

java - 在 AWS Lambda 中集成 Google Guice

java - Flex移动项目: using Blazeds to access data from java class

java - 反向播放,java

java - JFace ColumnWeigthData 导致父级增长

java - 重写 hybris commonI18NService roundCurrency 方法

c# - 架构问题 : use of dependency injection resulting in rubbish API

c# - ApplicationServices(根)IServiceProvider 和注入(inject)的 IServiceProvider 有什么区别?

java - 基于类绑定(bind)创建不同类型对象的单一提供程序

java - Guice:辅助注入(inject)和提供者