- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Guice DI 的新手。我想弄清楚我的情况。
简单来说,有没有通过Guice @annotations来替代MapBinder的?
我的场景:
Interface A{}
Class A1 implements A{}
Class A2 implements A{}
我想注入(inject)A的实现类如下,
if(param = One) then Inject A1 to A
if(param = Two) then Inject A2 to A
我知道上面可以用MapBinder来完成,但我想通过注释来完成,如下所示,
Class A1 implements A
{
@Inject(param = One)
A1(){}
}
Class A2 implements A
{
@Inject(param = Two)
A2(){}
}
所以用参数注解的类可以根据参数(一或二)自动选择和注入(inject)类。
既然@Inject 不能接受参数,覆盖@Inject 在这种情况下会有帮助吗?如果是这样,我们该怎么做?
或者这种情况是否只能通过使用 MapBinder 进行绑定(bind)来实现(我不想使用 binder 的原因是我们想要显式定义键值对的绑定(bind)映射,但是使用注释只是简单地注释带有参数的实现类 - 更容易维护)。
提前致谢。
最佳答案
为了回答您的后续问题,我相信您正在寻找的是命名注入(inject)。看这个例子:
public class GuiceNamedTest extends AbstractModule {
public static void main(String[] args) {
Injector i = Guice.createInjector(new GuiceNamedTest());
i.getInstance(InstaceOne.class);
i.getInstance(InstaceTwo.class);
}
@Override
protected void configure() {
Bean beanOne = new Bean();
beanOne.name = "beanOne";
Bean beanTwo = new Bean();
beanTwo.name = "beanTwo";
bind(Bean.class).annotatedWith(Names.named("one")).toInstance(beanOne);
bind(Bean.class).annotatedWith(Names.named("two")).toInstance(beanTwo);
bind(InstaceOne.class);
bind(InstaceTwo.class);
}
public static class Bean {
String name;
}
public static interface A {}
public static class InstaceOne implements A {
@javax.inject.Inject
public InstaceOne(@Named("one") Bean b1) {
System.out.println(b1.name);
}
}
public static class InstaceTwo implements A {
@javax.inject.Inject
public InstaceTwo(@Named("two") Bean b1) {
System.out.println(b1.name);
}
}
}
在这里,我使用 annotatedWith
来命名我的 guice 处理实例。其中一个对应于字符串“一”,另一个对应于“二”,类似于您的示例。
然后,在我的 A
实现中,我可以使用 @Named
注释对这些 bean 进行特定注入(inject)。
运行上面代码的结果是:
beanOne
beanTwo
如您所见,它将我的 bean 的正确实例注入(inject)到正确的实现中。
希望对你有帮助,
阿图尔
关于java - Guice @annotations 方法类似于 Guice MapBinder 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755725/
我在 Java + Kotlin 项目中使用 Guice 将算法实现映射注入(inject)到特定的 bean 中,但我不断得到 1) No implementation for java.util.
我有一个像这样的 Gucie 绑定(bind)设置: MapBinder mapBinder = MapBinder.newMapBinder(binder(), String.class,
我有一项服务需要注入(inject) mulitmap - Map> public class EnrichService { private Map> typeEnrichers;
在 Java 项目中,使用 Google Guice 通过 Gradle 5.2 进行构建。 我使用MapBinder (http://google.github.io/guice/api-docs/
我使用com.google.inject:guice。在我的项目中,我包含了一个依赖项,该依赖项具有一个模块(扩展 com.google.inject.AbstractModule 的类),该模块定义
我正在使用 guice 和 MapBinder。我有以下服务接口(interface): public interface IService 和两个实现: public class AService
我正在使用 MapBinder 将键映射到它们各自的实现。现在我有这样的东西: MapBinder processor = MapBinder.newMapBinder
在使用Guice's MapBinder构建插件架构的过程中, 使用 Guice 3.0 ,我遇到了 Guice 在剥离所有模块时抛出 CreationException 的问题,这在该应用程序中是一
这是我的 StatusMapper 界面的样子: public interface StatusMapper { Status map(final T exception); } 这是我的 M
我看过它的使用,但我不确定它的用法是否是很好的用例示例。您有 Guice Mapbinder 的惯用用法示例吗? ? (Mapbinder 确实是解决问题的正确工具的案例) 最佳答案 顺便说一句,它看
基本上我想了解 MapBinder 是如何工作的。我尝试搜索示例,但找不到令我满意的示例。在我提问之前,这是我的一些设置。 public class MyModule extends Abstract
我正在尝试使用 Guice 将 map 注入(inject)到类中,其中 map 的形式为 Map . 我想使用MapBinder扩展来完成此任务,但似乎 MapBinder 需要一个实例化的对象作为
我正在使用 Guice MapBinder 将接口(interface)的不同实现绑定(bind)到特定的键。问题是,我需要在这些绑定(bind)中注入(inject)一些依赖项。我认为这是不可能的,
这很奇怪,MapBinder 没有包含在我从 Maven 存储库获得的 Gucie 3.0 中: 我的 maven 配置是这样的: .... com.google.
我是 Guice DI 的新手。我想弄清楚我的情况。 简单来说,有没有通过Guice @annotations来替代MapBinder的? 我的场景: Interface A{} Class A1 i
我最近开始使用 Guice,需要一些帮助。 我有一个带有构造函数的类,其中包含 3 种不同的要注入(inject)的参数。下面是类 @Inject public Bullet(EntityParams
假设我有水果课 class Fruit extends FruitBase { @Inject Fruit(Type type) {...} } FruitBase 通过方法注入(inject
我试图在运行时使用工厂将枚举映射到类类型来注入(inject)一个类,但我遇到了一个问题,当我尝试注入(inject)它时它会抛出错误。 java.lang.IllegalArgumentExcept
尝试了以下实现: private class TestModule extends AbstractModule { @Override public void configure()
今天早上我尝试将 Guice 版本从 4.0-beta 更新到 4.0-beta4,但 MapBinder 开始出现问题。我有一个扩展 JerseyServletModule 的基本模块。在confi
我是一名优秀的程序员,十分优秀!