dsl java_Java DSL理解

dsl java_Java DSL理解SpringIntegr 中引入了 JavaDSL 希望可以让开发人员不再完全依赖 xml 进行配置 而是可以通过 Java 代码进行集成流程的配置 并且通过 java 编译器尽早发现问题 的确 通过 xml 进行配置 小项目还可以 大项目估计很容易把人给绕晕 但是 JavaDSL 其实也有类似的问题 小项目写写还是很清楚的 项目一大 看 DSL 如同看天书 接下来 我们结合两个例子来体验一下 JavaDS

Spring Integration中引入了Java DSL,希望可以让开发人员不再完全依赖xml进行配置,而是可以通过Java代码进行集成流程的配置,并且通过java 编译器尽早发现问题。

的确,通过xml进行配置,小项目还可以,大项目估计很容易把人给绕晕。但是Java DSL其实也有类似的问题。小项目写写还是很清楚的,项目一大,看DSL如同看天书。

接下来,我们结合两个例子来体验一下Java DSL的用法。

@Bean

public IntegrationFlow Flow1() {

return IntegrationFlows.from(“resultChannel”)

.log(LoggingHandler.Level.INFO, “full list of records”, m -> m.getPayload())

.get();

}

@Bean

public IntegrationFlow Flow2() {

return f -> f

.handle(Jpa.retrievingGateway(this.entityManagerFactory)

.jpaQuery(“from Person p where p.id =:id”)

.expectSingleResult(true).parameterExpression(“id”, “payload”)

)

.log(LoggingHandler.Level.INFO, “query with where condition”, m -> m.getPayload());

}

上面2例中,Flow1和Flow2都是IntegrationFlow,但是返回值的写法不同。

Flow1采用的是标准写法,从定义输入Channel开始;

Flow2是衍生写法,看似没有定义输入Channel,其实它默认自己就是输入Channel,Channel的名称为Flow2.input。也就是在自己的方法名后,追加“.input”组合成Channel名称。这个在文档里是提到了的。在Flow2方法体中的f,其类型就是MessageChannel.

从原理上来说,DSL通过串接方式,将一条消息的完整处理路径给定义出来。所以dsl中主要是配置处理过程。处理过程之间会通过channel进行串接。串接用的channel不需要特别声明,dsl自动配置。

一些标准的操作,可以用transformer,splitter,一些非标的操作,也可以使用专用处理函数,这个称为handle.在xml里称为service activator.

si是否一定要用kafka adapter呢?其实也未必。完全可以将kafka通讯包装成handle,然后进行处理。

用kafka adapter,有一定的学习成本。如果后续调试的话,也不是很方便,是一个黑盒。学会了si,开发时能否快捷一些?这个需要对比spring kafka和spring integration kafka adapter的差异。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223612.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:48
下一篇 2026年3月17日 下午1:48


相关推荐

  • pidstat详解

    pidstat详解pidstat Reportstatis 显示进程 任务 的相关的统计 pidstat 主要用于监控全部或指定进程占用系统资源的情况 如 CPU 内存 设备 IO 任务切换 线程等 pidstat 首次运行时显示自系统启动开始的各项统计信息 之后运行 pidstat 将显示自上次运行该命令以后的统计信息 用户可以通过指定统计的次数和时间来获得所需的统计信息

    2026年3月18日
    2
  • 写辅助脚本违法吗_网络游戏里的成功几率

    写辅助脚本违法吗_网络游戏里的成功几率转至http://www.cppblog.com/elva/archive/2008/02/19/42924.html一、前言  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间…

    2022年10月8日
    4
  • compound extreme_particular conditions

    compound extreme_particular conditions在看SpringSide代码过程中,发现SS使用了extremecomponents于是,今天看了看extremecomponents的使用,发觉extremecomponents真是个好用西。可以直接接受response的数据。按照test例子自己做的:效果不错哟eXtremeTable是一个可扩展的用于以表格的形式来显示数据的一组JSP标签库.网站:http://www.extreme…

    2022年8月20日
    8
  • pycharm安装教程,超详细

    pycharm安装教程,超详细在安装 pycharm 之前 确保你的电脑配置好了 python 没有下载安装的可以去看我的文章 gt gt gt python 安装详细教程 pycharmwindo 版本下载地址 https www jetbrains com pycharm download section windows 下载社区版本 日常学习使用够用了 专业版是收费的哦 功能更强大 下载完后打开安装程序 点击 next 选择一个路径然后 next 把这些选项都勾选上 点击 Install 安装完后点击 Finish

    2026年3月27日
    2
  • Java 数组定义格式-数组动态初始化-数组元素的访问-数组静态初始化-数组的遍历-数组获取最大值

    Java 数组定义格式-数组动态初始化-数组元素的访问-数组静态初始化-数组的遍历-数组获取最大值数组定义格式 1 数组概述在一个班级中 有非常多学生需要存储每位学生的考试成绩 比如 a 98 b 97 c 96 d 88 1 数组概述 一次性声明大量的用于存储数据的变量 这些要存储的数据通常都是相同类型数据 例如 全班同学的考试成绩 2 数组 是一种用于存储多个相同类型数据的存储模型数组定义格式范例 1 推荐使用定义格式 1 数据类型 变量名 int arr 含义 定义了一个 int 类型的数组 数组名是 arr 范例 2 数据类型变量名 intarr 含义

    2025年8月3日
    5
  • pycharm怎么多行注释

    pycharm怎么多行注释选中多行之后 然后按快捷键 Ctrl 就可以多行一起注释了 pycharm 快捷键及一些常用设置 Alt Enter 自动添加 shift O 自动建议代码补全 Ctrl tSVN 更新 Ctrl kSVN 提交 Ctrl 注释 取消注释 选择的行 Ctrl Shift F 高级查找 Ctrl Ent

    2026年3月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号