自定义 Spring Bean 参数

2024-02-27

我正在使用 activator 上发布的 Spring Akka 示例来创建 Spring 托管 bean actor。这是我当前使用的代码,包括演示类:

@Component
class Test extends UntypedActor {

    @Autowired
    protected ObjectMapper objectMapper;

    protected final Account account;
    protected final Order order;

    public Test(Account account, Order order) {
        this.account = account;
        this.order = order;
    }

    @Override
    public void onReceive(Object message) throws Exception {
        if (message instanceof SomeCommand) {
            // Do something using the order and the account;
        } else if (message instanceof FooCommand) {
            // More stuff
        }
    }
}

@Component
public class SpringExtension extends AbstractExtensionId<SpringExtensionImpl> implements ExtensionIdProvider {

    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public SpringExtensionImpl createExtension(ExtendedActorSystem system) {
        return applicationContext.getBean(SpringExtensionImpl.class);
    }

    @Override
    public ExtensionId<? extends Extension> lookup() {
        return applicationContext.getBean(SpringExtension.class);
    }

}

@Component
public class SpringExtensionImpl implements Extension {

    @Autowired
    private ApplicationContext applicationContext;

    public Props props(String actorBeanName) {
        return Props.create(SpringActorProducer.class, applicationContext, actorBeanName);
    }

}

public class SpringActorProducer implements IndirectActorProducer {

    private final ApplicationContext applicationContext;
    private final String actorBeanName;

    public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName) {
        this.applicationContext = applicationContext;
        this.actorBeanName = actorBeanName;
    }

    @Override
    public Actor produce() {
        return (Actor) applicationContext.getBean(actorBeanName);
    }

    @Override
    public Class<? extends Actor> actorClass() {
        return (Class<? extends Actor>) applicationContext.getType(actorBeanName);
    }

}

现在我的问题是,如何使用自定义构造函数参数实例化演员。我曾考虑过使用工厂或 setter 方法,但我认为这不是一个选择,因为我相信底层 Actor 类不可访问。非常感谢有关此事的任何意见。如果现在清楚了,请发表评论。

附言。如果您认为我的代码中有错误或者有更好的方法来解决它,请告诉我!我对 Spring 和 Akka 的结合经验很少,所以任何建议都值得赞赏。


您可以将附加参数作为 varargs 传递(Object...) to SpringExtensionImpl and SpringActorProducer。所以你的代码看起来像这样:

@Component
public class SpringExtensionImpl implements Extension {

   @Autowired
   private ApplicationContext applicationContext;

   public Props props(String actorBeanName, Object... args) {
       return (args != null && args.length > 0) ?
            Props.create(SpringActorProducer.class,
                    applicationContext,
                    actorBeanName, args) :
            Props.create(SpringActorProducer.class,
                    applicationContext,
                    actorBeanName);
    }
}

public class SpringActorProducer implements IndirectActorProducer {

    private final ApplicationContext applicationContext;
    private final String actorBeanName;
    private final Object[] args;

    public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName) {
        this.applicationContext = applicationContext;
        this.actorBeanName = actorBeanName;
        this.args = null;
    }

    public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName, Object... args) {
        this.applicationContext = applicationContext;
        this.actorBeanName = actorBeanName;
        this.args = args;
    }

    @Override
    public Actor produce() {
        return args == null ? 
              (Actor) applicationContext.getBean(actorBeanName):
              (Actor) applicationContext.getBean(actorBeanName, args);
    }

    @Override
    public Class<? extends Actor> actorClass() {
        return (Class<? extends Actor>) applicationContext.getType(actorBeanName);
    }

}

然后您可以像这样创建测试参与者:

SpringExtensionImpl springExtensionImpl; actorSystem.actorOf(springExtensionImpl.create(Test.class, account, order));

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

自定义 Spring Bean 参数 的相关文章

  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何使用子流对排序流的项目进行分组?

    你们能解释一下如何使用 newgroupBy在 akka 流中 文档 http doc akka io docs akka current scala stream stream cookbook html implementing red
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 非 Spring 托管类中 DI 的编译时编织

    我想为标记为的类配置编译时编织 Configurable注释能够将 spring 依赖项注入到初始化的类中new操作员 我不想使用加载时编织 因为我无权访问应用程序服务器的运行脚本 因此无法修改它 另外 我希望能够在测试中使用此类 我的意思
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static

随机推荐

  • 获取不包含 DOCTYPE、HTML、HEAD 和 BODY 标签的 BODY 内容

    我想做的是在 PHP 系统中包含一个 HTML 文件 不是问题 但是由于各种原因 该 HTML 文件也需要单独使用 所以我需要知道如何剥离 doctype html PHP 上下文中的 head 和 body 标签 如果可能的话 我对 PH
  • 如何使用 Gspread 下载 Google Docs Excel 工作表并在本地访问数据(A1 表示法)?

    我需要通过 Gspread 从 Google Docs 下载 Excel 工作表 然后多次需要读取不同单元格的值 A1 符号 因此 我不能只获取电子表格然后致电val worksheet acell B1 value 因为脚本会因过多的 A
  • 显示 R 和 dplyr 的拟合值

    我有数据框DF 我在用R and dplyr来分析它 DF包含 gt glimpse DF Observations 1244160 Variables Channel int 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 将 ExceptionDescribe 转换为字符串

    我需要将 JNI 中 ExceptionDescribe 的输出作为字符串获取 以便之后可以将其写入文件中 而不是直接在命令行上写入 有什么方法或想法可以做到这一点吗 提前致谢 Sami ExceptionOccurred 是第一步 要获取
  • 当区域设置为阿拉伯语时 Android 中的日期格式问题

    我这里有一个严重的问题 我正在构建一个可以在阿拉伯语设备上运行的应用程序 我需要将日期发送到服务器 我使用 Android DatePickerDialog 来获取日期 但日期总是使用阿拉伯语字符发送 并且何时我尝试再次显示它 它给了我无法
  • 使用 JavaScript 计算 A、B、C、D,而不是 0、1、2、3...

    这可能是一个不寻常的请求 但对于我的脚本 我需要一个按字母而不是数字递增的函数 例如 这是一个数字示例 var i 0 while condition window write We are at i i 本质上 我想像 Microsoft
  • Rails 3.1 Devise 如何更改 Flash Message CSS 从通知到成功?

    Rails 3 1 和 Devise 1 5 问题 我使用以下代码在布局中显示 Flash 消息 我想将一些确认消息的 css 类从通知更改为成功 但我不知道在哪里覆盖或更改密钥 因为我不知道它在哪里设置 有人能指出我正确的方向吗 Than
  • Android webapp 中调用 JS 的原生代码

    我正在编写一个Android 网络 应用程序 我不会将应用程序上传到网络 而是在应用程序资源中设置HTML JS 这意味着 GUI 将是 HTML5 我将使用另一个 本机 线程从麦克风读取数据 并希望将 解析后的文本 发送到 HTML5 J
  • Microsoft.AspNetCore.Hosting.Abstractions 清单定义与程序集引用不匹配

    当我运行实体框架核心命令时add migration MyMigrationName在类库中我收到以下错误 无法加载文件或程序集 Microsoft AspNetCore Hosting Abstractions 版本 1 1 1 0 Cu
  • 如何在 C 语言中找到字符串中字符的索引?

    假设我有一个字符串 qwerty 我希望找到的索引位置e其中的人物 在这种情况下 索引将是2 我如何在 C 中做到这一点 我找到了strchr函数 但它返回一个指向字符的指针而不是索引 只需从 strchr 返回的内容中减去字符串地址即可
  • ios UIWebView 中的大量内存泄漏

    为了寻找系统中其他地方的内存泄漏 我创建了一个带有元刷新标签的 20 MB 网页 我们的想法是通过我们的数据路径代码移动大量数据以确认内存稳定性 div style border 1px solid red Content loading
  • 使用单向多对多映射进行删除级联

    我正在使用 Fluent 和 NHibernate 我有两个对象 A 和 B 它们之间具有多对多关系 当 A HasMany B 时 我使用单向多对多映射 B中没有关于A 单向 的参考 这会在数据库中创建第三个表 名为 ABMapping
  • 将日期时间插入 SQLite 数据库

    我试图将时间插入数据库 但是当我打印插入的时间时 它不正确 我在将时间变量插入数据库之前打印了它 它是 12 01 09 149059 我用的时候效果很好strftime但我换了 因为时间已经到了 from datetime import
  • Bootstrap 轮播显示下一张和上一张图像

    引导程序轮播是否可扩展以在滑块中显示下一个和上一个图像 div class carousel slide ol class carousel indicators li class active li li li ol div
  • React Native Android:方法不会覆盖或实现超类型的方法

    我已经添加react native fbsdk到我的 React Native 项目并让它在 iOS 上正常构建 但在android方面 我无法让gradle来构建项目 当尝试编译react native fbsdk时 我遇到了 方法不会覆
  • eclipse 4 RCP 应用程序中启动屏幕上的进度条

    我想在 Eclipse 4 RCP 初始屏幕上添加一个进度条 我已经尝试了以下代码和设置 但仍然无法获取进度条 org eclipse ui SHOW PROGRESS ON STARTUP true 在plugin customizati
  • 将大对象插入 Postgresql 返回 53200 Out of Memory 错误

    PostgreSQL 9 1 NPGSQL 2 0 12 我想将二进制数据存储在 postgresql 数据库中 大多数文件加载良好 但是 大型二进制 664 Mb 文件会导致问题 当尝试通过 Npgsql 使用大对象支持将文件加载到 po
  • DropDownList 的 MVC2 编辑器模板

    过去一周的大部分时间我都在深入研究 MVC2 中的新模板功能 我很难让 DropDownList 模板正常工作 我一直在努力解决的最大问题是如何将下拉列表的源数据获取到模板 我看到很多示例 您可以将源数据放入 ViewData 字典 Vie
  • LoadError: 无法加载此类文件 -- capybara 独立代码

    我正在使用 Ruby 和以下教程构建一个简单的后挖矿程序 http ngauthier com 2014 06 scraping the web with ruby html http ngauthier com 2014 06 scrap
  • 自定义 Spring Bean 参数

    我正在使用 activator 上发布的 Spring Akka 示例来创建 Spring 托管 bean actor 这是我当前使用的代码 包括演示类 Component class Test extends UntypedActor A