Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';使用Guice设置属性的正确方法是什么?_Java_Dependency Injection_Guice - Fatal编程技术网

Java 什么';使用Guice设置属性的正确方法是什么?

Java 什么';使用Guice设置属性的正确方法是什么?,java,dependency-injection,guice,Java,Dependency Injection,Guice,假设我们有两个类-Main和MainDependency。第二个类仅由Main使用,使用IoC的目的是构造Main类的实例 MainDependency类有一个整型字段。不需要设置此字段(或者,如果未指定任何其他内容,则假定它应该始终具有默认值) 问题:设置整数字段的最正确方法是什么?我看到的一种方法是在模块中创建类似字段,然后在配置模块中使用该值。但我觉得这是一种错误的方式 请分享你的经验。提前Thx。我认为您主要有两种选择: 1) 使用常量绑定注入它。MY_常量的值可以在实例化时传递给模块;

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

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

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


请分享你的经验。提前Thx。

我认为您主要有两种选择:

1) 使用常量绑定注入它。
MY_常量
的值可以在实例化时传递给
模块
;可以从系统属性中获取,也可以通过其他方式获取

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) 使用辅助注入创建一个工厂,该工厂将把您的值作为参数,并返回一个
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);
请注意,使用辅助注入,您不需要实现
MainDependencyFactory
。Guice将为您创建它