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

1.2.3AOP的底层原理

一.JDK的动态代理技术

1.JDK 动态代理是 AOP 底层核心实现之一,核心结论是:基于接口反射生成代理类,通过 InvocationHandler 拦截目标方法调用。

2.核心原理概述

JDK 动态代理无需预编译,运行时由 JVM 通过反射机制动态生成代理类字节码。代理类会实现目标对象的所有接口,并重写接口方法,最终将方法调用转发给 InvocationHandler 处理,从而实现横切逻辑植入。

3.关键组成部分

  1. InvocationHandler 接口:代理类的方法调用都会转发到该接口的 invoke () 方法,是横切逻辑的核心载体。
  2. Proxy 类:提供静态方法 newProxyInstance (),用于生成代理实例,需传入类加载器、目标接口数组、InvocationHandler 实例。
  3. 目标对象:必须实现至少一个接口,否则 JDK 动态代理无法生效(这是其核心限制)。

4.实现流程

  1. 目标对象实现业务接口,定义核心业务方法。
  2. 自定义 InvocationHandler 实现类,在 invoke () 方法中编写横切逻辑(如日志、事务),并通过反射调用目标方法。
  3. 调用 Proxy.newProxyInstance (),传入目标对象的类加载器、接口数组和自定义 InvocationHandler,生成代理实例。
  4. 调用代理实例的接口方法时,自动触发 InvocationHandler 的 invoke () 方法,先执行横切逻辑,再执行目标方法。

二.cglib 代理技术

CGLIB(Code Generation Library)是 AOP 底层另一种重要的代理技术,与 JDK 动态代理不同,它基于继承生成目标类的子类作为代理类,无需目标类实现接口。这种特性使其可以代理没有实现接口的类,弥补了 JDK 动态代理的局限性。

1.核心原理概述

CGLIB 通过字节码生成技术,在运行时动态生成目标类的子类(代理类),并重写目标类的非 final 方法。在重写的方法中,CGLIB 会先执行横切逻辑(如日志、事务),再调用父类(目标类)的原始方法,从而实现对目标方法的增强。

2.关键组成部分

  1. MethodInterceptor 接口:类似 JDK 动态代理的InvocationHandler,是横切逻辑的核心载体。代理类的方法调用会被拦截并转发到该接口的intercept()方法。
  2. Enhancer 类:CGLIB 的核心工具类,用于生成代理类。通过设置父类(目标类)、回调接口(MethodInterceptor)等参数,动态创建代理实例。
  3. 目标对象:可以是普通类(无需实现接口),但不能是 final 类,且被代理的方法不能是 final 方法。

3.实现流程

  1. 定义普通的目标类(无需实现接口),包含核心业务方法。
  2. 自定义MethodInterceptor实现类,在intercept()方法中编写横切逻辑,并通过反射调用目标类的原始方法。
  3. 使用Enhancer类配置代理参数:设置父类(目标类)、回调对象(自定义的MethodInterceptor)。
  4. 调用Enhancer.create()生成代理实例(目标类的子类)。
  5. 调用代理实例的方法时,会被MethodInterceptor拦截,先执行横切逻辑,再执行目标方法。
http://www.dtcms.com/a/586383.html

相关文章:

  • Android 屏幕旋转流程
  • 简述电子商务网站的建站流程佛山app开发公司
  • 精准突破 0.5mm 透明玻璃测量瓶颈 —— 泓川科技激光位移传感器的技术革新与成本优势
  • C++笔记-24-文件读写操作
  • 做网站需要会哪些计算机语言net源码的网站建设步骤
  • 做网站一般都是织梦网站 展示板
  • 设计配色推荐的网站广州深圳外贸公司
  • 怎样做建网站做淘客无锡定制网站制作公司
  • 北京网站建设 奥美通全网营销个人网页设计html代码实现
  • 网站开发多少人下载百度app到手机上
  • 网站进入沙盒期有哪些竞价网站
  • 朝阳市网站制作随州有哪些网站建设的公司
  • 雪球网 MD5_1038 逆向算法分析
  • 车辆类型特征智能识别
  • [法兰西公学院] Esterel A到Z (Gérard Berry 2018)
  • 液压矫平机:给金属板材“舒筋活血”的科学
  • 如何用图片文字做网站地图定位网站开发
  • 简述网站开发的三层架构互联网行业前景如何
  • 蛋白质核转位图像识别与分析系统
  • Javascript函数之函数的返回值?
  • 【常见的Markdown 图标语法】
  • 微网站微名片在线制作logo图片
  • 临沂住房和城乡建设局网站打不开江苏建筑工程招标信息网
  • 【Jenkins】Jenkins配置从节点 - Launch Agent
  • 网站开发程序都有什么免费的网站怎么建
  • asp.net企业网站建设建筑网片厂家
  • 另一个自己
  • 解决虚拟机CentOS7网络无连接问题
  • 建网站是自己做还是用CMS大连外经贸网站
  • 新闻通稿 | 软件产业迈入“智能重构”新纪元:自主进化、人机共生与责任挑战并存