Ohhnews

分类导航

Baeldung

使用 Embabel Agentic AI 框架实现 LLM 工具调用推理

本文探讨了如何利用 Embabel Agentic AI 框架在 Java 应用中获取 LLM 工具选择推理的可观测性。文章首先分析了 Spring AI 通过模式增强实现该功能的方案及其局限性(如隐藏的模式修改、额外复杂性),然后介绍了基于系统提示的轻量替代方案,最后重点演示了 Embabel 的“思考模式”(Thinking Mode)。该模式通过结构化输出(ThinkingBlock)捕获每个工具的选择理由和最终决策推理,无需修改现有工具定义或引入自定义 DTO。文章结合停车推荐场景展示了完整的代码实现和测试结果,突出了 Embabel 方案在架构简洁性和可移植性方面的优势。
#embabel#ai agent#工具调用推理#java#llm
$ more
Baeldung

Spring MVC HandlerInterceptor 测试方法

本文介绍了如何使用 @WebMvcTest 和 MockMvc 对 Spring MVC 的 HandlerInterceptor 进行测试,无需启动完整应用。通过一个运费计算应用示例,演示了基于功能开关的版本路由拦截器的实现与测试,包括零比例、全比例和部分比例三种场景的验证。
#spring mvc#handlerinterceptor#单元测试#功能开关#mockmvc
$ more
Baeldung

测试Spring MVC HandlerInterceptor

本文介绍如何测试Spring MVC中的HandlerInterceptor,利用@WebMvcTest和MockMvc在不启动完整应用的情况下验证拦截器逻辑。 首先,通过一个配送费计算场景来说明拦截器的用途:使用FeatureFlagService获取新算法(v2)的发布百分比,在preHandle()中根据随机数决定当前请求使用v1还是v2,并将决策存入请求属性。控制器读取属性后调用对应的服务方法。 测试方面,通过@WebMvcTest加载Web层,自动注册通过WebMvcConfigurer配置的拦截器。使用Mockito模拟依赖,分别测试0%、100%和50%三种发布比例下的行为:0%时所有请求使用v1,100%时全用v2,50%时两种版本均被调用。 最后指出,@WebMvcTest仅验证Web层隔离,若需完整应用上下文可改用@SpringBootTest;对于不依赖Spring请求处理的简单拦截器,可直接用MockHttpServletRequest进行单元测试。
#spring mvc#拦截器测试#mockmvc#功能开关#单元测试
$ more
foojay

Temporal之于代码,犹如数据库之于数据

Temporal.io 平台提供了一种称为“持久执行”的能力,使开发者编写的代码能在崩溃、部署或故障后自动恢复执行,就像数据库保证数据持久化一样。文章回顾了当前分布式系统中常见的手动实现故障恢复的方式(状态标志、重试队列、定时任务等),并指出 Temporal 通过记录工作流的事件历史并在新的 Worker 上重放来重建执行状态,从而实现了跨崩溃的连续性。Temporal 工作流可以睡眠数天并准时唤醒,无需占用线程或资源。作者将 Temporal 与虚拟内存、垃圾回收和 Kubernetes 等系统类比,说明这些平台都将以前由应用处理的复杂问题抽象为底层服务。采用 Temporal 后,开发者可以删除状态列、重试逻辑、幂等检查等大量基础设施代码,专注于编写描述业务流程的直线型代码。文章预言,像不再自己编写事务日志一样,未来团队将不再自行拼凑执行恢复机制。
#temporal#持久执行#工作流#数据库#可靠性
$ more
Baeldung

Java周刊第654期:Spring Cloud Contract迁移与Zuul 4.0发布

本期Java周刊重点介绍了Spring Cloud Contract迁移至Stubborn.sh平台、Netflix Zuul 4.0正式发布、Quarkus 3.37.2维护版及Vert.x 4.5.29/5.1.4版本更新。此外还涵盖Kotlin AI编码基准测试、本地模型编程经验、以及多项技术深读文章。
#java#spring#spring cloud contract#kotlin#框架更新
$ more
foojay

更多平台,相同承诺:汽车、传感器、商务、视频与构建

本周Codename One发布重大更新,将应用覆盖范围扩展至汽车仪表盘、运动传感器、桌面级输入、折叠屏设备,并新增Commerce商务SDK、Secrets密钥API、版本化构建以及真正的视频生成功能。同时,上周关于开源资金支持且不设陷阱的承诺得以延续。车机投影(CarPlay/Android Auto)采用模板化API,运动传感器集成加速度计、陀螺仪等及手势识别,输入系统支持触控笔压力与倾斜、折叠屏姿态等。Commerce验证购买但不抽成,Secrets对所有用户开放,版本构建支持锁定发行版或开发主分支。视频部分新增VideoIO(编码/帧精确解码)、音频混合器及基于Whisper的时序字幕生成。此外,模拟器升级至上游JCEF和捆绑ffmpeg,Skin Designer迁移至JavaScript目标。此版本体现了付费服务(可选的、消耗资源的云服务)与开源核心的平衡,确保可选功能切实可选,付费不绑架开发成果。
#codename one#跨平台开发#开源#商业api#视频生成
$ more
DZone Java

Codename One 7.0.250 发布:原生Mac应用支持与桌面集成

Codename One 7.0.250 版本正式引入原生 Mac 应用构建目标,通过复用 iOS 构建管道生成真正的原生 Mac 二进制文件,无需捆绑 JVM。同时新增桌面集成特性:原生标题栏和菜单映射(Commands 可定向至标准系统菜单,如偏好设置、退出)、可交互滚动条(支持拖动、点击翻页)以及桌面通知支持。新项目默认启用这些功能,现有项目可通过构建提示手动开启。该版本标志着 Codename One 从移动跨平台向桌面原生体验的重要跨越。
#codename one#原生mac应用#桌面集成#跨平台开发#java移动框架
$ more
DZone Java

探索Java 25的若干语言增强特性

Java 25作为最新LTS版本,引入了多项语言增强特性。文章重点介绍了五个关键改进: 紧凑源文件与实例main方法:简化程序入口,去除类声明等样板代码。 灵活构造器体:允许在super()或this()之前执行安全语句(如参数验证),提高代码表达力。 原生类型模式匹配:将模式匹配扩展至所有原生类型,支持更简洁的类型检查和转换。 作用域值:提供在线程间传递不可变上下文的安全机制,替代ThreadLocal,与虚拟线程完美配合。 稳定值:在JVM层面确保深度不可变性,实现线程安全且无锁。 这些特性使Java编码更简洁、安全和高效,体现了Java在持续演进中的活力。
#java 25#语言新特性#语法简化#模式匹配#并发与安全
$ more
Jetbrains Blog

dotInsights 2026年7月号

dotInsights 2026年7月号 本文是JetBrains发布的2026年7月dotInsights月度简报,汇总了近期.NET和软件开发领域的32条重要链接,涵盖C#新特性(如字段关键字、可区分联合)、.NET 11预览、AI编码实践、Rider 2026.2新版本、SkiaSharp 4.0、Dapr工作流等,并介绍了JetBrains自身动态,包括GitHub Copilot集成、Junie AI agent正式版以及TeamCity未来规划。
#.net#c##软件开发#人工智能#jetbrains
$ more
foojay

“这不可能有用”:我在Temporal.io工作坊中学到的东西

核心观点 开发者在初次接触Temporal时通常会经历从怀疑到兴奋的过程:应用程序在崩溃后能够原地恢复,保持变量不变。Temporal通过持久执行实现了这一点——它不阻止崩溃,而是让崩溃变得无关紧要。工作坊展示了在柏林We Are Developers大会上,开发者Tom Wheeler带领参与者构建防崩溃Java应用的实践。 工作原理 Temporal采用历史回放而非内存快照。它将工作流代码(确定性编排层)与活动代码(非确定性操作,如API调用)严格分离。每次工作流调用活动时,Temporal服务记录事件历史。崩溃后,工作进程重放历史重建状态,通常不到一秒,不重复已完成操作。架构包含工作流/活动定义、工作进程和Temporal服务三部分,支持多种语言混合。 实际演示 Tom现场杀死库存服务,UI显示活动失败并自动重试,服务恢复后订单顺利完成,无需人工干预。Temporal Web UI可检查每个工作流执行的细节:输入、输出、时间线、每步活动的机器进程。开发者可以“在代码中直接sleep 30天”代替cron作业,减少对消息队列等基础设施的依赖。
#temporal#持久执行#工作坊#java#崩溃恢复
$ more