当前位置: 首页 > news >正文

【唠嗑第二嗑-代码里面的无为思想,空空如也的接口】

文章目录

  • 接口怎么是空的
  • 你当然知道为什么
    • 1.定义类型体系,而非行为契约
    • 2.为差异化行为预留空间
    • 3.真正的实现在子接口中
  • 为什么我会惊讶
  • 圣人不妄为

最近拜读了老子的《道德经》。
很多时候觉得读懂了,可转念一想又不是那么回事!不知道是老子他老人家,没有经历过咱普通人的柴米油盐酱醋茶,还是作者觉悟低,地下三层那么低!
但还是以自己浅薄之经验,稍稍谈一下小感悟!

无为,不是什么都不做,而是不额外干预,让事物遵循本身的规律运行。
空接口,不是没有代码,而是不定义任何行为,只做标识,让框架按规则去处理。

接口怎么是空的

相信兄弟们在工作过程中,多多少少都接触过Spring这位厉害至极的仁兄!没有他,哪有现在这么香的编程生活呀。那各位必然领教过这位仁兄最厉害的招式之一AOP。没见识过的,请看下方:

packageorg.aopalliance.aop;publicinterfaceAdvice{}

哇哦,哇哦,哇哦。无招胜有招!

你当然知道为什么

兄弟,你肯定说这有啥大惊小怪的!不就是一个空接口吗? 我都会写!
嘿嘿,作者也会写!

1.定义类型体系,而非行为契约

这是一个顶级接口,是用来定义类型体系,而非行为契约。 我只是告诉你们我是什么,至于我能做什么,你看着办!

在 Spring 的类型世界里,任何实现了 Advice接口的类,都会被识别为“一种通知”。这为框架管理、收集和组织这些组件提供了基础。

2.为差异化行为预留空间

  • 不同类型的通知(前置、后置、环绕)其执行逻辑和所需信息完全不同。

  • 一个 Before Advice需要在目标方法前运行,它不关心返回值,也不需要控制方法是否执行。

  • 一个 Around Advice则必须能控制目标方法的执行(调用 ProceedingJoinPoint.proceed()),并能处理返回值和异常。

如果强行在 Advice接口中定义一个如 execute()的通用方法,其签名将极其臃肿且难以适用于所有子类型。因此,Spring 选择将具体行为的定义放到更特化的子接口中

3.真正的实现在子接口中

  • 顶层空接口(Advice):确立类型归属,构建体系根基。

  • 中层功能接口(MethodInterceptor, MethodBeforeAdvice):定义具体的行为契约。

  • 底层实现类(各种 Advice的实现,包括注解解析生成的适配器):提供具体实现。

为什么我会惊讶

我初读这些代码的时候,其实只是佩服架构设计者的优雅! 感叹Spring的强大和灵活!
但当我最近读到了这些:

三十辐共一毂,当其无,有车之用。
埏埴以为器,当其无,有器之用。
凿户牖以为室,当其无,有室之用。

天地之间,其犹橐籥乎?虚而不屈,动而愈出。

道冲,而用之或不盈

谷神不死,是谓玄牝。玄牝之门,是谓天地根。

无有相生的概念在我赖以生存的代码间回响。
这一刻,我有点能感受到那个老家伙的伟大和高明!

圣人不妄为

  • 不定义具体行为 (无为)
  • 只标识身份 (给万物命名、分类,天下就有序)
  • 交给外部系统处理(顺势而为)

我们同在一个世界,也许连生活也相差不大,可是他在微末之间尽得高山流水!
而我只有蝇营狗苟!也许就是我们的AOP不一样吧!
他的前置是,他的后置是。所以他得到了
而作者的前置是房贷后置是家庭。所以得了一个活着就好

不过我们有一个共同的Interface,那就是生命!这可也是一个空空如也的顶级接口啊!

http://www.jsqmd.com/news/551248/

相关文章:

  • AI 对人类的影响与普通人的应对策略
  • Bing SEO优化实战:从零开始提升网站排名的5个关键步骤
  • 从 Hugging Face 到本地:ProcessorMixin 模型保存与加载的完整指南
  • 基于 Simulink 的 多目标优化:效率 + 动态响应 + 纹波
  • Python爬虫实战:如何绕过央视频加密获取高清视频源(附完整代码)
  • BiliTools全能B站资源下载工具:高效获取视频资源的新手必备指南
  • 3分钟搞定:Source Code Pro字体终极配置指南,让代码阅读体验提升300%
  • 探秘书匠策AI:论文开题报告的“全能小助手”
  • Windows 7如何突破Python版本限制?企业级兼容性解决方案指南
  • Leather Dress Collection多场景落地:独立设计师IP开发、虚拟试衣、NFT服饰创作
  • 让演示更灵活:PPT和PPS格式互换的实用方法
  • 【shell编程】深入解析Permission denied:7种实战解决方案与场景应用
  • 万字长文 解析串口通信
  • YOLOFuse镜像亮点解析:环境零配置与多种融合策略详解
  • Git + 云原生:如何管理 K8s 配置版本?从踩坑到 GitOps 落地,全网最细实战手册
  • 最全|OpenClaw 2026年阿里云部署方法,小白7分钟掌握
  • 解锁Android系统潜能:fastboot模式全流程详解
  • 探索动平衡机采集卡源码的奇妙世界
  • 如何快速实现智能自动化配置:OpCore-Simplify完整实战指南
  • 鸿蒙 HarmonyOS 6 | 加解密 API 跨平台数据兼容性挑战
  • 边缘计算与云端协同:MyEMS 在工业能源实时监测与智能调度中的应用突破
  • HarmonyOS6 ArkTS List 设置折行走焦
  • 2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟题)
  • nli-distilroberta-base企业落地:嵌入BI工具插件实现报表注释逻辑一致性检查
  • Java Stream 中间操作全解析:惰性求值、无状态与有状态操作详解
  • OpenTiny NEXT 系列直播学习心得|从 AI 前端到开源实践,吃透 MCP、GenUI 全技术栈(附可复制实战教程)
  • 突破语言壁垒:XUnity.AutoTranslator实现Unity游戏全语言无障碍体验
  • gerrit打回后 如何操作?
  • 2026年阿里云部署OpenClaw|iMessage接入+千问/Coding Plan API+避坑指南
  • OptiScaler:跨平台游戏性能优化的技术融合方案