Spring断想:接口粘合

Spring能够粘合不同层面的解决方案 OpenDoc项目发起人及《DrBobb’s Journal China 》,Spring能够粘合不同层面的解决方案,但无论是MVC层还是ORM层,Java领域从来都不缺少好的框架,我们在使用Spring时,从这些框架中做选择的依据是什么? 立即下载

Spring和AOP像一个强力的粘合剂,将完全独立开发的组件(或说是模块,下同)粘合成一个有机的,完整的,可扩展的系统。正是有了这个粘合剂的帮助,才实现了比较彻底的独立组件开发。

说它是“比较彻底”,是因为它极大的减少了组件之间的依赖。在你开发一个组件时,基本上不会因为其它组件没有开发完成,或出现Bug而影响到你的进度。

但是,它并没有完全消除开发时组件之间的依赖,你仍然得依赖于其它组件提供的API接口。为此,我们不得不把一个组件拆成两个jar包:一个component-api.jar,一个component-impl.jar。由于api包内全是公用接口和Value Object,所以它相对稳定,可以早早的提供出来。这样,一个组件如果要使用另一个组件的服务,在开发阶段,只须依赖于api包即可。运行时,Spring再根据服务提供组件的配置信息找到正确的实现类。

 

昨天,我们在一个讨论会上发现了一个有趣的问题:

组件UIA是一个UI组件,它要求提供一些数据,于时它把自己的要求写时接口ProviderA中。组件C1和C2是两个不同的业务组件,它们的UI中都有使用UIA这个组件,而它们都提供了自己的数据接口ServiceC1和ServiceC2。

ProviderA所要求的方法,在ServiceC1和ServiceC2中都有提供。这个时候怎么做才能使各个组件完独立呢。

一、让ServiceC1和ServiceC2继承于ProviderA。但是这样将导致业务组件依赖于UI组件。有谁知道一共有多少个UI组件需要依赖啊?而且UI组件是最易变的。

二、把ProviderA从uia.jar抽出来,放到单独的uia-api.jar中。这个就未免小题大做了。一个系统少说也有几十个UI组件,难道要生成上百个jar包不成?

三、把所有的UI的要求的API都抽出来,放到一个ui-api.jar中。这样jar包是少了,可是单个的UI组件就失去独立性了。

上面三个方案,不管怎么管理UI组件的接口,都没有解决业务组件依赖于不定数目的UI组件这个问题。

 

最后,我们采用的方法是:把UI组件视为某个业务组件的子组件,UI组件自己不定义接口。所有对外的接口和对UI的接口,都放在业务组件的api包中。

这样做,业务组件和UI组件都依赖于api包,互相之间没有依赖。当然,这样做,UI组件就不能游离于大的业务组件之外。而我们采用这个方案的原因也在于,我们认定为多个组件提供服务的UI组件是很少的。

 

显然我们采用的方法只是就事论事的一个折衷方案。并没有解决服务提供者和消费者之间的交叉依赖。

要解决这种交叉依赖,我的思路是再提供一个接口之间的粘合机制。消费者定义自己要求的服务接口,提供者定义自己提供的服务接口。最后用一个配置文件,将二者粘合起来。

目前,Spring还没有提供这种功能。

 
第10篇:Agent + 爬虫 = 全自动数据采集专家 在企业级数据采集场景中,传统爬虫的痛点已经到了无法忽视的地步:而Agent + 爬虫的组合,就是这些痛点的终极解决方案。它的核心逻辑是:把爬虫从「人工写死的固定执行脚本」,升级为「能自主分析、自主决策、自主适配、自主修复的智能采集机器人」。我们在生产环境中做过对比测试:传统爬虫开发10个网站的采集脚本需要3人天,而Agent采集机器人只需要3分钟,页面改版后的修复成本从1人天降到了0,采集任务的成功率从62%提升到了95%以上。终端执行以下命令,安装基础依赖,与前9篇环境完全兼容: 二、核心能力拆解:Age 阅读详情

相关推荐

RTKlib操作手册--使用样例数据演示

本文将使用样例数据演示如何使用RTKLIB进行rtk差分定位。

samur2的博客 7785

从Google日食工具看AI可视化:复杂领域知识的Web化实践

数据可视化是将抽象数据转化为直观图形的核心技术,其原理在于通过视觉编码映射数据属性,帮助用户快速识别模式与洞察。在工程实践中,结合地理信息系统(GIS)和WebGL技术,能够实现动态、交互式的时空数据呈现。这类技术的核心价值在于降低复杂领域知识的理解门槛,实现科学计算的平民化。典型的应用场景包括天文现象模拟、气象预报展示、物流路径规划等需要将专业模型转化为大众认知的领域。本文以Google AI日食可视化工具为案例,深入解析其如何利用星历表数据和Bessel元素算法,通过现代Web技术栈构建预测模型,为开发

weixin_34007020的博客 352

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2053

【IOC框架】分析与理解

1 IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同...

weixin_34153893的博客 4081

我的世界模组开发——前言

避坑:在开发过程中一定不要过分依赖AI,虽说现在的人工智能很厉害,但是也有很大的弊端,很多AI生成的代码错误百出,还得自己修改,而且像deepseek这种AI的训练数据还停留在一年前,给出的maven仓库地址都是过时的甚至是错误的,开发模组就是要多学习,多看源码,这样开发模组的水平才能越来越高。总而言之,build.gradle文件在我的世界Forge模组开发中扮演了重要的角色,它定义了项目的构建过程、依赖关系和编译选项,为开发者提供了灵活而强大的构建工具。开发工具推荐使用idea,因为可以使用通灵义码。

qq_24992377的博客 2594

Loop Engineering 来了:从写 Prompt 到设计 Loop,AI 编程的第四次范式跃迁

文章摘要: Loop Engineering是AI编程领域的新范式,标志着从"人手动喂指令"到"设计自驱动循环"的跃迁。其核心在于通过五个组件(定时器、工作空间、知识体系、连接器和子Agent验证)构建自动化任务流,使AI系统能自主运行。这一概念的火爆源于模型能力和工具链的成熟,使得任务设计成为关键瓶颈。作者指出,从Prompt到Loop的四次范式跃迁(语言学→信息科学→控制论→管理学)反映了人机协作关系的根本变化:人类角色从执行者逐渐退居为目标设定者。落地Loop Engineering的真正挑战在于目标

少说,多做 335

什么是Spring,Spring有什么优点,有什么缺点

Spring总结Spring学习Spring是什么Spring 的发展历程spring 的优势功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 Spring学习 每当我们学习一个框架的时候,首先要知道他是的,其次他能为我们做什么,用

怪咖@的博客 6805

R语言绘制森林图

运行上述代码后,将会生成一个标题为"森林图示例"的森林图。通过以上代码示例,你可以根据自己的数据集和需求创建定制的森林图。在实际应用中,你还可以进一步调整图形的样式,添加图例、坐标轴标签等,以使森林图更加美观和易于理解。在数据可视化领域,森林图是一种常用的图形类型,用于展示多个分类变量之间的关系。本文将介绍如何使用R语言创建森林图,并提供相应的源代码示例。森林图通常由垂直的线段表示不同类别的观测值,并且线段的长度表示数值变量的大小。上述代码中,我们为不同的类别分别指定了蓝色和红色作为颜色映射关系。

TechNovaX的博客 1045

Spring——初识Spring

Spring——初识Spring 1.Spring简介 在我们之前使用的Servlet,JDBC,JSP进行JavaWeb开发的时候,有个著名的词叫做:“单体地狱”。代码量是相当的大,直到框架的出现才简化了Web开发。比如说我们之前学过的MyBatis,就是替代了JDBC的框架,让我们不去写复杂重复的JDBC代码。 后来又出现了开源框架:Spring(寓意着软件行业的春天),Spring 是一个轻...

qq_43411550的博客 329

Python经典编程习题100例:第32例:相反顺序输出列表

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 本人初学Python,只为熟悉语法编写,大神请勿理会 点击下面链接 Python经典编程100例习题汇总 题目描述: 按相反的顺序输出列表的值。 解题思路: > 利用reverse函数逆序 代码: arr=['f','g','e','b'] print(arr) arr.reverse() print(arr) ...

优快云 精品推荐 1419

强化学习算法案例——一个经典的走迷宫任务。

作者:禅与计算机程序设计艺术 1.简介 在强化学习(Reinforcement Learning, RL)中,有一个经典的任务——走迷宫,其原理简单易懂,但它的实际意义却深远,它让计算机学习如何通过策略网络(policy network),以最佳的方式解决复杂的任务。本文将介绍如何用强化学习解决这个经典

AI天才研究院 3218

实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑

商品详情服务,要求:商品基础信息走缓存,减少 DB 查询;典型:AI 只贴注解,忽略 AOP 代理、key 设计、缓存穿透/击穿/过期、序列化、同步刷新,本地单测正常,上线后缓存脏数据、命中率异常、雪崩。如果业务在事务中,@CacheEvict / @CachePut 如果在事务提交前执行,一旦事务回滚,缓存已经被删掉/更新,数据不一致。• 如果在同一个类里用 this.xxx() 调用带缓存注解的方法,不走代理,缓存直接失效;// 更新商品:先更新 DB,再删除缓存,而不是直接 @CachePut。

2401_89363342的博客 489

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 891

MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地

无状态,所以任何实例都能处理任何请求,扩容不再需要粘性会话;显式句柄,所以跨调用状态是可审计、可过期的,而不是藏在进程内存里;幂等重放,所以交互式中断在分布式环境下也可恢复,代价是你要自己保证副作用可对账;头部路由,所以网关能在不解析 body 的前提下做治理,而校验 header/body 一致性成了新的安全底线。这些没有一个是在发明新概念。它们是分布式系统里被验证过二十年的老手艺:无状态、显式上下文、幂等、网关治理、fail-fast、可观测。

qq_36021478的博客 176

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

压缩省了60%磁盘,写入TPS掉了25%——InnoDB页压缩的三类隐性代价与适用边界

InnoDB页压缩能显著降低表空间占用,但磁盘的节省不是免费的。压缩页在写入时需要CPU执行压缩算法、读取时需要CPU解压;压缩后的页在Buffer Pool中占用更少空间,但命中后的解压开销和未命中时的解压延迟会改变缓存的实际效能;写密集场景下,压缩/解压带来的写入放大可能让TPS明显下降。本文拆解InnoDB页压缩的物理机制、三类隐性代价的量化表现,以及“什么场景该用、什么场景该绕开”的判断框架。

DBAxiaoye的博客 337

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 546

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选

从订单与库存写入出发,拆解 @Transactional 的代理调用链、默认回滚规则与自调用问题;通过 Spring Boot + H2 的五个验证用例比较 REQUIRED、REQUIRES_NEW、NESTED,并说明数据库事务与 Redis、消息和远程接口的边界。

qq_74421990的博客 334

模型“看不见”中间的东西——prompt cache 与 Zone 分区

本文揭示了LLM系统中promptcache失效的根源:动态内容错置于系统提示词前缀,导致缓存命中率从80%骤降至4%。核心教训是“变化内容必须排在最后”——通过Zone分区(ZoneA稳定区、ZoneB动态区),将每轮可能变化的内容移至末尾,可确保前缀稳定,恢复高命中率。关键在于:前缀匹配要求逐字节相同,任何一处变动即导致后续全部失效。修复建议包括:重构提示词结构、正确分类内容、监控缓存单位(字节与token不可混用)、避免压缩破坏前缀。最终实现成本降低9倍,提升推理效率。

qinglongcn的博客 222

SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的

# SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的 > 这是一套基于 Spring Boot 的新闻推荐系统源码,配套 `db.sql` 建表脚本,业务覆盖新闻发布、排行榜管理、评论回复、点赞点踩、收藏夹和轮播图配置。形态是**前后台双端**:前台是读者用的 layui 静态站,后台是管理员用的 Vue 单页应用(编译产物已嵌在工程里)。最值

面朝大海 877

Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试

Spring Framework 7 中,Java 开发者如何使用 HTTP Interface 管理外部服务调用?本文从传统 RestClient 出发,介绍 @HttpExchange、`@GetExchange`、`RestClientAdapter` 和 HttpServiceProxyFactory 的使用方式,并结合商品服务案例说明客户端配置、超时控制、异常处理及 Mock 测试。最后讨论从 RestTemplate、Feign 迁移时的技术取舍,帮助开发者建立更清晰的 HTTP 客户端架构。

代码不止,探索不息 256

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 581

SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在

# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑

面朝大海 229

基于 Springboot3+SpringAI+Agent+RAG+Function Calling的校园闲置物品循环流转 AI 智能估价平台

基于SpringBoot3+SpringAI1.0,打造校园闲置循环平台,实现从发布、智能估价(规则+大模型校准)、担保交易到信用治理与运营看板的闭环。通过RAG问答、FunctionCalling工具调用、流式SSE输出及本地降级策略,将AI能力深度嵌入业务链路。项目强调可落地性:无APIKey也能演示,向量存MySQL,状态机防绕过,代码清晰可读。适合想做真实AI全栈项目、准备面试或提升工程化思维的开发者。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 311

【Spring AI】Tool Calling 入门与实践

本文介绍Spring AI中工具调用(Tool Calling)机制,通过@Tool注解定义可被模型调用的Java方法,实现模型与应用能力的协同。核心在于模型生成结构化调用请求,由应用执行真实逻辑并返回结果,确保安全可控。文章以查询时区时间为例,演示了工具注册、参数Schema、回调执行及异常处理等关键环节,并对比了三种注册方式:直接对象传递、MethodToolCallbackProvider统一管理与编程式构建,适用于不同场景下的灵活集成。

REGARD712的博客 390

Spring AI开发从入门到实践-什么是Spring AI

《Spring AI开发从入门到实践》是面向Java开发者的企业级AI应用指南,基于Spring生态构建,实现LLM、向量库、智能体等技术的低门槛集成。书中以“不造模型,只做连接”为核心,通过统一API屏蔽厂商差异,原生支持自动配置、可观测性等工程能力,解决AI从Demo到生产落地的痛点。全书分五部分,覆盖环境搭建、核心组件、实战应用、生产优化与前沿探索,配套可运行代码,助力开发者无缝将AI融入现有系统,真正实现企业级落地。

老卫的技术站 144

基于SpringBoot的营养食谱管理系统设计与实现-附源码

基于SpringBoot的营养食谱管理系统,实现食谱、食材与营养数据的数字化管理,支持多条件筛选、个性化饮食方案定制及收藏功能,助力用户科学饮食,提升营养师管理效率。系统采用前后端分离架构,技术栈成熟,功能完整,测试验证通过,具备良好可扩展性,未来可集成体质测评、饮食打卡等智能功能。

专注于大学生项目实战开发,讲解,毕业答疑辅导,java就业辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。全网粉丝10w+,平台优质java、小程序创作者。 326
上一篇: 运用C#创建一个.Net下的Web Service
下一篇: HttpClient中文烂码和cookie问题小记
javaokay
博客等级 码龄20年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值