有一个接口DCE,它是由DCEImpl类实现的,DCE impl类有一个依赖项,比如说字符串S,它是通过构造函数获得的。
S的宇宙是有限的,比如S只能取值{'A','B','C'}。
已有一个Guice模块在其构造函数中接受S的值,然后将接口DCE绑定到正确初始化的DCEImpl版本。
public class DCEModule extends AbstractModule {
private final String s;
public DCEModule(String s){
this.s = s;
}
protected void configure() {
bind(DCE.class).toInstance(new DCEImpl(s));
}
}
现在我有一个需要
列表的 C 类
我想在< code>C
中通过Guice注入这个列表。为此,我创建了一个新的模块< code>DCEPModule,它将提供一个< code >列表
@Provides
List<DCE> getDCE() {
for(String s: S){
Module m = new DCEModule(s);
install(m);
Injector injector = Guice.createInjector(m);
listDomains.add(injector.getInstance(DCE.class));
}
}
我的问题是我不想在这个模块中调用一个新的注入器,因为< code>DCEPModule将由一个不同的模块安装。
public class NewModule extends AbstractModule {
protected void configure() {
install(DCEPModule);
}
}
我想要一个获取列表的方法
您可以通过使用<code>Multibinder</code>(javadoc,wiki)来实现这一点。下面是一个示例:
public class SnacksModule extends AbstractModule {
protected void configure(){
Multibinder<Snack> multibinder = Multibinder.newSetBinder(binder(), Snack.class);
multibinder.addBinding().toInstance(new Twix());
multibinder.addBinding().toProvider(SnickersProvider.class);
multibinder.addBinding().to(Skittles.class);
}
}
现在,多活页夹将提供一个<code>Set
@Provides
public List<Snack> getSnackList(Set<Snack> snackSet) {
return new ArrayList(snackSet);
}
您可以将实现添加到多个模块中的同一个多绑定中。当您调用Multibinder.newSetBinder(Binder, type)
时,它不一定会创建一个新的多绑定。如果该类型已经存在一个多绑定,那么您将获得现有的多绑定。
问题内容: 我要测试的Java类(称为)具有以下功能: (有一种方法可以检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit拥有以下功能: 但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。 显然是由于对同一接口()有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式? 问题答案:
我要测试的Java类(称为)具有以下内容: (有一个方法,它将检查条件并调用a或B)。 显然,这是因为同一个接口()上存在多个依赖关系。在声明模拟服务时,有没有一种方法可以指定限定符?或者我需要为依赖项设置设置器并设置老式的方式吗?
首先,我不得不说,我试着用谷歌搜索这个问题的答案,但没有任何答案可以解释我的怀疑。总之,我想了解的是: 此接口有两种不同的实现: 我将在以下示例中使用这些实现: 更新1.1至帖子 我还有一个类使用相同的“动物”界面: 所以我的问题是:1-我如何知道将向AnimalStateManager注入什么实现?2-如果我想强迫“AnimalStateManager”上的“动物”对象成为猫,该怎么办? 更新1
我需要通过@Autowired注入服务类的具体实现。 服务接口: 实现: 服务中的方法带有@ Transactional注释 现在我想将postServiceImpl注入到我的控制器中——因为我需要使用实现中的一个方法,它不在接口中: 我收到NoSuchBeanDefinitionException并显示以下消息: 没有[(…)类型的合格bean。找到依赖项的PostServiceImpl]:预计
我有一个名为“消费者”的界面。 实现如下所示: } 我需要有2个consumerImpl类的实例,但要注入不同的DBManager实现。如何通过guice配置?
我对Guice的理解是: 构造函数级注入()意味着每次通过