java - 在 Guice 初始化中使用先前注入(inject)的绑定(bind)

标签 java guice actor akka

我需要解决奇怪的任务:我有 A 类,它是由 Guice 创建的:

bind(A.class)

但稍后我需要使用 A 类(本质上就是 Actor)来初始化 Actor:

actorSystem.actorOf(
  new Props(
    new UntypedActorFactory() {
      public UntypedActor create() {
         /// ????
      }
    })
 );

如何返回先前绑定(bind)的参与者 A 的实例?

最佳答案

我可能误解了 ???? 所暗示的问题,但是当您使用 Guice 时,您通常会尝试避免更新大量对象。当您需要由 Guice 管理的新对象时,您只需请求该类型的提供者即可。即使您没有为其编写提供程序,也有一个隐式提供程序,Guice 可以在其中重复使用其绑定(bind)范围内的对象,或者为您提供一个包含所需注入(inject)对象的新提供程序。

它可能看起来像:

class WhateverClassThisIs {
  private provider<A> providesA;

  @Inject
  public WhateverClassThisIs(provider<A> providesA) {
    this.providesA = providesA;
  }

  public whateverMethodThisIs() {
    actorSystem.actorOf(
    new Props(
      new UntypedActorFactory() {
        public UntypedActor create() {
           /// ???? translation: I need an object A here.
           A a = providesA.get();
        }
      })
    );
  }
}

如果您可以编辑其他类类型,则可以注入(inject)其构造函数/方法所需的对象,从而消除更多 new 的使用。

另一方面,如果您说要获得正确类型的 A,您需要执行此 actorSystem.actorOf 调用,那么您需要实现一个提供程序A 执行此操作而不是仅仅绑定(bind)它。

关于java - 在 Guice 初始化中使用先前注入(inject)的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119010/

相关文章:

java - 任何可以限制内存缓存的内存使用的 Java 缓存,而不仅仅是实例计数?

scala - Play : Run tests with custom GuiceApplicationLoader

java - 在构造函数中带参数的 DI

scala - 在 scala-akka actor 中,我应该在处理消息时打开一个 future 吗?

java - 调用已经适用于单选按钮的函数,以便打印详细信息

java - 如何避免 Java 中不必要的类引用?

java - 在基于toplink和struts 2的应用程序中,即使提交数据后数据也会从数据库中消失

java - 绑定(bind)到 Guice 提供程序实例时显式添加绑定(bind)器依赖项

concurrency - 了解 Erlang 中通用服务器实现中消息的工作流程

kotlin - 如何将制作人与 Actor 联系起来?