反射,动态代理,AOP联系和理解
反射-动态代理-AOP理解反射运行时的“自我审视”能力反射是指程序在运行期间可以获取任意一个类的内部信息如属性、方法、构造器并能够直接操作这些内部成员。核心作用把“类”也当成对象来对待。正常情况下我们通过 new 创建对象有了反射我们可以通过一个字符串类名利用反射 API在运行时动态地创建对象、调用方法。关键类Class、Method、Field、Constructor。生活类比你拿到一个遥控器类的class对象即使不看说明书也能通过按键反射 API试出每个按钮的功能甚至能拆开遥控器看到里面的电路板私有属性。一个简单的反射示例javaClass? clazz Class.forName(“com.example.User”);Object user clazz.newInstance(); // 创建对象Method method clazz.getMethod(“sayHello”);method.invoke(user); // 调用方法动态代理运行时的“替身”机制动态代理是指在程序运行时动态地生成一个代理类这个代理类可以在不修改原目标类代码的情况下对目标类的方法进行增强如添加日志、事务、权限校验、限流逻辑。核心角色目标对象真正执行业务逻辑的对象。代理对象由程序动态生成的“替身”持有目标对象的引用。调用处理器代理对象的所有方法调用都会被转发到这个处理器中由它决定何时调用目标方法、何时添加额外逻辑。两种主流实现JDK 动态代理基于接口。要求目标类必须实现至少一个接口。代理类和目标类实现同一个接口。CGLIB 动态代理基于继承。通过生成目标类的子类来创建代理因此无法代理 final 类或 final 方法。动态代理和反射的关系动态代理是反射最经典的应用场景之一。代理类在运行时正是通过反射来获取目标类的方法并调用 method.invoke(target, args) 来执行目标方法的。AOP面向切面编程的思想AOP 是一种编程思想它把那些与核心业务逻辑无关但被多处业务模块使用的代码如日志、事务、安全抽取出来形成一个的“切面”然后通过注解将这些切面的增强逻辑动态地应用到业务方法上。核心目的解耦。让业务代码只关心业务让通用逻辑切面可以独立维护。核心概念切面通用逻辑的模块化比如一个日志切面。连接点程序执行过程中的一个点比如一个方法的调用。切入点一个表达式用来匹配哪些连接点需要被增强。通知在切入点前后要执行的具体动作如 Before、After、Around。实现方式在 Java 中AOP 的底层实现主要就是动态代理。Spring AOP 就是通过 JDK 或 CGLIB 动态代理在运行时为目标 Bean 生成代理对象从而将切面逻辑“织入”到方法调用中。反射是基石没有反射就无法在运行时动态获取类信息动态代理也就无从谈起。动态代理是反射的应用动态代理利用反射在运行时生成代理类并调用目标方法实现了对方法的无侵入式增强。AOP 是思想动态代理是手段AOP 是一种解耦的编程思想而动态代理是实现这种思想最主流的技术手段。Spring AOP 正是通过动态代理将切面逻辑应用到目标方法上。反射是底层能力动态代理依赖反射创建代理对象AOP是一种编程思想核心是为了将业务和通用逻辑进行解耦依赖动态代理代理对象是转发员本身不干活所有方法调用都转发到调用处理器的 invoke() 方法┌─────────────────────────────────────────────────────────────┐│ 调用方 ││ proxy.sayHello() │└───────────────────────────┬─────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────────┐│ 代理对象 (Proxy) ││ ││ 所有方法调用都被转发不执行真正的业务逻辑 ││ ││ sayHello() → invoke(proxy, sayHello, null) ││ eat() → invoke(proxy, eat, null) ││ pay(100) → invoke(proxy, pay, [100]) │└───────────────────────────┬─────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────────┐│ 调用处理器 (InvocationHandler) ││ ││ invoke(proxy, method, args) { ││ ┌─────────────────────────────────────┐ ││ │ 1. 决定是否调用目标方法 │ ││ │ 2. 决定前置逻辑日志、事务、权限 │ ││ │ 3. method.invoke(target, args) │ ← 反射调用 ││ │ 4. 决定后置逻辑提交、回滚、耗时 │ ││ │ 5. 决定返回值 │ ││ └─────────────────────────────────────┘ ││ } │└───────────────────────────┬─────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────────┐│ 目标对象 (Target) ││ ││ 真正执行 sayHello() 的业务逻辑 ││ 不知道代理和处理器的存在 │└─────────────────────────────────────────────────────────────┘

相关新闻

Redis线上致命坑:明明设了24小时过期,内存却疯狂暴涨

Redis线上致命坑:明明设了24小时过期,内存却疯狂暴涨

文章目录前言1. 诡异线上现象:内存悄咪咪疯狂膨胀2. 问题根源:SET EXPIRE有原子性大坑2.1 并发时序到底怎么翻车的3. 怎么解决:用原子单命令搞定写入加过期3.1 SpringRedisTemplate简单写法3.2 底层调用setEx原生命令写法4. 又一个大坑&…

2026/11/4 2:49:05 阅读更多 →
LLM大语言模型:核心原理、能力边界与应用范式探析

LLM大语言模型:核心原理、能力边界与应用范式探析

摘要大语言模型(Large Language Model,LLM)是当前人工智能领域最具代表性的技术形态,也是连接基础研究与产业应用的关键桥梁。本文从认知层面系统梳理LLM的核心原理、能力边界与应用范式。首先解析LLM的"大"之所在——训…

2026/11/3 21:01:34 阅读更多 →
后端开发中经常遇到的字符串处理问题:编码、转义与格式转换

后端开发中经常遇到的字符串处理问题:编码、转义与格式转换

在后端开发过程中,有一类问题看起来很简单,但实际开发和排查问题时经常会遇到,例如: URL 参数为什么变成了一堆 % JSON 字符串为什么多了一层反斜杠 Base64 编码后的内容到底是什么 Unicode 字符串如何转换 HTML 实体 &am…

2026/11/3 15:49:51 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/5 1:08:50 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/5 0:54:28 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/4 19:19:54 阅读更多 →

日新闻

周新闻

月新闻