对不起,如果这是一个微不足道的问题,我是新的指南。假设我有下面这个类:
public class MyClass {
@Inject
public MyClass(final MyDependency myDependency) {
this.name = myDependency.getName();
}
public String getName() {
this.name;
}
}
然后在其他地方我想做:
public class SomeOtherClass {
public void test() {
MyClass instanceFoo = injector.getInstance(MyClass.class);
MyClass instanceBar = injector.getInstance(MyClass.class);
assertTrue("foo", instanceFoo.getName());
assertTrue("bar", instanceBar.getName());
}
}
我希望有两个“MyClass”实例,一个名为“foo ”,一个名为“bar ”(也就是说,它们中的每一个都有一个不同的依赖实例)。我如何将这两个实例添加到我的注入器中,如何用“injector.getInstance”检索它们中的每一个?
我不想为每个可能的依赖项创建一个“MyClass”的子类。
谢谢你!
您的问题,如标题所示,有一个更简单的解决方案:如果你想要任意数量的MyClass或MyDependency实例,你可以注入一个提供程序
与问题的主体一样,有两个部分:为同一个<code>类</code>创建多个可注入的<code>键</code>,以及使用不同的名称和注入的依赖项按照您想要的方式设置实例。
Guice使用< code>Key
标识绑定,它是一个完全限定的类(如< code>MyClass或< code>List
大多数情况下,您可以不直接使用Key:在< code>bind调用中使用< code>annotatedWith,或者将注释添加到< code>@Provides方法中,并通过将注释放在构造函数参数或@ Inject-annoted字段中来请求它们。但是,您仍然可以通过使用Key上的静态方法手动创建一个键来使用< code>getInstance和< code>getProvider。(对于复杂的情况,使用TypeLiteral或< code > names . named ;详情见他们的文档。)
现在您知道了如何注入@命名("foo")Myclass
或@Foo Myclass
,您如何提供它们?根据您的需要,我会选择三个选项之一:绑定toInance
、使用@提供
方法或创建“辅助注入”工厂。
>
如果您的MyClass实例本身不需要注入,并且您不需要改变或操纵实例状态,您可以根据需要准备命名的实例,然后用toInstance
将它们绑定到。
您还可以编写一个
@Provides @Named(“foo”)
MyClass 方法,该方法采用 MyClass
参数(Guice 通过注入器提供),设置名称并返回实例。这是编写提供程序类或实例的低开销替代方法,将为您提供一个新实例,而不是 toInstance
绑定所暗示的共享。
如果您真的希望< code>name
成为您的类的构造函数参数的一部分,也许是为了保持实例不变,您可以使用“辅助注入”来告诉Guice哪些参数是您自己提供的,哪些参数来自Guice注入器。这将允许您注入一个< code>MyClass。Factory,并调用< code > myclassfactory . create(" foo "),这可以直接在您的消费类中完成,或者使用上面的< code>@Provides技术。细节稍微超出了问题的范围,但是请查阅“辅助注入”以获得关于语法和添加适当JAR的细节。
我们已经使用Google Guice框架进行依赖注入。我需要在Java创建一个接口的多个insatnce。 执行从这里开始:下面代码中的KFHRecordValidator.java类: process类具有RecordValidationHelper类的引用,并且注入是通过构造函数进行的。iRecordValidationService.java是一个具有validate方法的接口。 类处理器有
问题内容: 您能否获得2个具有相同基础类型的单例实例? 在春季,这显然是微不足道的,因为它基于您将范围附加到其上的命名实例,但是我看不到关于将类型绑定到实现类的指南。请注意,由于有问题的实例通过guice注入了其他依赖项,因此我不想绑定到该实例。 问题答案: Guice也很容易!创建两个招标注解,说和,然后 然后
我有一个名为“消费者”的界面。 实现如下所示: } 我需要有2个consumerImpl类的实例,但要注入不同的DBManager实现。如何通过guice配置?
我有一组验证器类,它们都扩展了一个公共抽象类,它们都具有相同的构造函数 我想要Guice的能力 < li >知道如何构造所有这些验证器,将相同的数据源注入所有这些验证器中 < li >使用多绑定器将所有验证器注入到一个类中 通过一些谷歌搜索,看起来我可以使用,但问题是如果我想这样做,我必须为每个验证器创建一个工厂,这是一个巨大的样板。因为他们都有相同的构造函数,我觉得一定有更好的方法。我的对象是在
问题内容: 我需要为同一张图片启动多个容器。如果我如下所示创建我的撰写文件,它可以正常工作。 我有什么简单的方法可以提及撰写实例的数量,而不是多次复制和粘贴? 问题答案: 更新的答案(2017年10月) 正如其他人提到的那样,docker API已更改。我正在更新我的答案,因为这是大多数人可能会看到的答案。 不幸的是,我们目前无法在docker-compose.yml文件中指定此版本(从3.5版开
问题内容: 标准对象工厂可能如下所示: 是否可以设置绑定以便为我完成切换,即我要做的就是调用getInstance或inject?我当时在看辅助注射,但这似乎是另外一个话题:https : //code.google.com/p/google- guice/wiki/AssistedInject 问题答案: 听起来您正在寻找,这是多重绑定功能的一部分。请注意,您仍然需要放入某种工厂接口或其他工厂接