加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – guice:命令行中的运行时注入/绑定

发布时间:2020-12-15 05:07:10 所属栏目:Java 来源:网络整理
导读:我有以下问题: @Inject MyClass(Service service) { this.service = service; } public void doSomething() { service.invokeSelf(); } 我有一个模块 bind(service).annotatedWith(Names.named("serviceA").to(ServiceAImpl.class);bind(service).annotated
我有以下问题:

@Inject
   MyClass(Service service) {
      this.service = service;
   }

   public void doSomething() {
      service.invokeSelf(); 
   }

我有一个模块

bind(service).annotatedWith(Names.named("serviceA").to(ServiceAImpl.class);
bind(service).annotatedWith(Names.named("serviceB").to(ServiceBImpl.class);

现在我的问题是我想让用户通过命令行参数动态选择运行时基础上的注入.

public static void Main(String args[]) {
   String option = args[0];
   ..... 
}

我怎么能这样做?我是否必须创建多个模块才能执行此操作?

解决方法

如果需要在运行时反复选择哪个实现使用 mapbinder是非常合适的.

你有一个像这样的配置:

@Override
protected void configure() {
  MapBinder<String,Service> mapBinder = MapBinder.newMapBinder(binder(),String.class,Service.class);
  mapBinder.addBinding("serviceA").to(ServiceAImpl.class);
  mapBinder.addBinding("serviceB").to(ServiceBImpl.class);
}

然后在您的代码中注入地图并根据您的选择获得正确的服务:

@Inject Map<String,Service> services;

public void doSomething(String selection) {
  Service service = services.get(selection);
  // do something with the service
}

您甚至可以使用custom scopes使用所选服务填充进样器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读