现代 Akka DI 与 Guice

2024-01-10

这里是 Java 8、Guice 4.0 和 Akka 2.3.9。我试图弄清楚如何用 JSR330 风格注释我的演员类@Inject注释,然后通过 Guice 将它们全部连接起来。

但实际上我读过的每一篇文章(下面的一些例子)要么使用 Scala 代码示例、Guice 的旧版本,要么 Akka 的旧版本:

  • 让它崩溃 http://letitcrash.com/post/55958814293/akka-dependency-injection
  • 斯卡拉-吉斯 http://www.typesafe.com/activator/template/activator-akka-scala-guice

因此,给出以下 Guice 模块:

public interface MyService {
    void doSomething();
}

public class MyServiceImpl implements MyService {
    @Override
    public void doSomething() {
        System.out.println("Something has been done!");
    }
}

public class MyActorSystemModule extends AbstractModule {
    @Override
    public void configure() {
        bind(MyService.class).to(MyServiceImpl.class);
    }
}

并考虑到FizzActor被注入MyService:

public class FizzActor extends UntypedActor {
    private final MyService myService;

    @Inject
    public FizzActor(MyService myService) {
        super();

        this.myService = myService;
    }

    @Override
    public void onReceive(Object message) {
        // .. Do fizz stuff inside here.
    }
}

然后我问:我该如何装备MyActorSystemModule创建实例FizzActor并正确注射它们与Java (not斯卡拉!)?

请注意:FizzActor不是我的演员系统中唯一的演员!


Use Creator http://doc.akka.io/japi/akka/2.3.11/akka/actor/Props.html#create(akka.japi.Creator)创造ActorRefs 在你的 guice 模块的提供者方法中。为了区分不同ActorRefs,它们是非类型化的,在您的提供者方法和注入点上使用注释,就像您在任何 guice 系统中一样。例如,

在你的 guice 模块中:

@Override
protected void configure() {
    bind(ActorSystem.class).toInstance(ActorSystem.apply());
    bind(FizzService.class).toInstance(new FizzServiceImpl());
}

@Provides @Singleton @Named("fizzActor")
ActorRef serviceActorRef(final ActorSystem system, final FizzService fizzService) {
    return system.actorOf(Props.create(new Creator<Actor>() {
        @Override
        public Actor create() throws Exception {
            return new FizzActor(fizzService);
        }
    }));
}

然后要使用演员服务,注入特定的ActorRef:

class ClientOfFizzActor {
    @Inject
    ClientOfFizzActor(@Named("fizzActor") ActorRef fizzActorRef) {..}
}

如果Props.create(..)Clause 是 Actor 类中的静态工厂方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现代 Akka DI 与 Guice 的相关文章

随机推荐

  • Firebase Firestore 新行命令

    我正在尝试使用新行命令在文本中创建新行 从这个问题来看 这是不可能的 新行命令 n 不适用于 Firebase Firestore 数据库字符串 https stackoverflow com questions 48755746 new
  • 什么是 C++ 函子及其用途?

    我不断听说 C 中的函子 有人能给我概述一下它们是什么以及它们在什么情况下有用吗 函子几乎只是一个定义了operator 这使您可以创建 看起来像 函数的对象 this is a functor struct add x add x int
  • 使用免费软件库使用 C# 编程压缩现有 PDF

    我一直在谷歌上搜索很多关于如何压缩现有的pdf 尺寸 我的问题是 我无法使用任何应用程序 因为它需要由 C 程序来完成 我无法使用任何付费图书馆 因为我的客户不想超出预算 所以付费图书馆肯定是NO 我做了最后两天的作业 找到了使用 iTex
  • 如何删除 React Material-ui Tab 组件中的焦点突出显示?

    我正在使用 React Material ui 库中的 Tab 组件 当 Tab 元素处于焦点时 该选项卡的左右边框上会出现这种奇怪的轮廓 有什么方法可以删除这个活动 焦点轮廓吗 下面是有问题的奇怪焦点样式的图像 我的代码如下 import
  • 如何关闭 iframe 本身内的 iframe

    如何使用 javascript 或 jQuery 关闭 iframe 本身内的 iframe 我试过了 a href 但没有成功 关闭 当前 iFrame 是不可能的 但您可以告诉父级操作 dom 并使其不可见 在 IFrame 中 par
  • apache 用户无法写入 .python-eggs [重复]

    这个问题在这里已经有答案了 我已经读到我需要设置PYTHON EGG CACHE环境变量 或将 python 库安装为未压缩的 egg 你建议哪一个 这完全取决于您是否想让鸡蛋作为通用库或仅用于单个 或少数应用程序 您是在谈论 Trac 安
  • 表单中输入和选择标签高度的问题

    我正在制作一个表格 当我给定相同的高度和宽度时
  • 如何在 Android 视觉 CameraSource 中添加放大/缩小手势

    我正在尝试开发一个带有人脸检测功能的简单相机应用程序 我正在使用这里的 android vision 示例https github com googlesamples android vision tree master visionSam
  • 多类分类问题中的不平衡类

    我正在尝试使用 TensorFlow 的 DNNClassifier 来解决具有 4 个不同类的多类 softmax 分类问题 我有一个不平衡的数据集 其分布如下 0级 14 8 1 级 35 2 2级 27 8 三级 22 2 如何为 D
  • 使用受保护的析构函数删除对象

    我必须为类编写一个共享指针 它必须做的许多其他事情之一是确保它可以删除它所指向的对象 如何编写适用于具有受保护析构函数的对象的解决方案 此外 如果该对象是使用放置新创建的 我不应该调用delete在对象上 因为该空间可能仍在使用中 将del
  • java集合中next()和hasNext()的区别

    我是java新手 我正在浏览集合 并且在迭代过程中他们使用了next and hasNext 方法 这两个方法具体有什么作用呢 我什么时候必须使用next and hasNext hasNext 如果迭代有更多值 则返回 truenext
  • jQuery 单击功能仅适用于第一个元素

    我在使用 jQuery 时遇到了一些问题 我正在制作一个简单的 CMS 在界面中我有一个页面列表 每个列表项中都有一个编辑链接 我让 jQuery 监听带有该编辑 ID 的点击 然后 它会查看父 LI 以查看它具有什么 id 以便用户可以将
  • fancybox 2.0.4 和 Vimeo

    我在将新的 fancybox V 2 0 4 g81c12d7 与新的 iframe vimeo 嵌入代码集成时遇到很多困难 有人有解决方案吗 是的 最简单的方法是使用新的 vimeo 的 万能播放器 http vimeo com api
  • 在 UINavigationController 中为根视图制作后退按钮

    所以我创建了一个UI导航控制器手动将其设置为我的UIWindow 的rootViewController 我想使用后退按钮退出UI导航控制器并在其位置加载另一个 viewController 但是 那backItem的财产UI导航栏 is
  • 语音识别产生 OSError:没有可用的默认输入设备

    This import speech recognition as sr r sr Recognizer with sr Microphone as source print Speak Anything audio r listen so
  • Swift:截断浮点数以将其显示在标签中[重复]

    这个问题在这里已经有答案了 当我想截断浮点数以在 Objective C 中的标签中显示时 我可以使用LABEL text NSString stringWithFormat 3f FLOAT 虽然我找不到如何在 Swift 中做到这一点
  • 使用 PyQt 捕获网络摄像头视频

    给出以下 PyQt 代码 我可以完美捕获网络摄像头的流视频 现在 我想修改代码 因此添加了一个名为 捕获 按钮 按下后将捕获流视频并保存图像 我怎样才能做到这一点 获得的小图像将用于查询对象识别服务器 import sys from PyQ
  • Spring MVC 检测ajax请求

    如何以最好的方式检测ajax请求 我目前在我的控制器中使用它 private boolean isAjax HttpServletRequest request String header request getHeader x reque
  • SwiftUI 工作表在第一次出现时就被忽略了

    这个错误快把我逼疯了 有时 大多数时候 提交的工作表会被忽略first打开的时间 这种情况仅发生在设备上并且仅在应用程序第一次启动时发生 这是使用 Xcode 12 1 构建的运行 iOS 14 1 的 iPhone 11 上的外观 也可以
  • 现代 Akka DI 与 Guice

    这里是 Java 8 Guice 4 0 和 Akka 2 3 9 我试图弄清楚如何用 JSR330 风格注释我的演员类 Inject注释 然后通过 Guice 将它们全部连接起来 但实际上我读过的每一篇文章 下面的一些例子 要么使用 Sc