Java平台上的AOP实现机制
2024-09-02 23:41:16
Java平台上的AOP实现机制
- 动态代理(Dynamic Proxy)机制,在运行期间动态的为相应接口生成对应的代理对象。SpringAop默认情况下采用这种机制来实现AOP机能。缺点:相对于编译后的静态类的执行,性能上可能略逊一筹。
- 动态字节码增强,通过ASM或者CGLIB等java工具库,在程序运行期间,动态构建字节码的class文件。在这样的技术前提下,我们可以为需要织入横切逻辑的模块类在运行期间,为这些系统模块类生成相应的子类。此技术不受限于接口。缺点:如果需要的扩展类中包含为final的实例方法的话,则无法对其进行子类化扩展。SpringAop在无法采用动态代理的时候,会使用CGLIB库的动态字节码增强支持来实现AOP功能的扩展。
- java代码生成,已过时。例:由EJB容器根据开发者描述信息,生成java代码,织入相应横切逻辑。
- 自定义类加载器,自定义类加载器通过读取外部描述信息,在加载class文件期间就可以将横切逻辑添加到系统模块类的现有逻辑中,然后将更改后的class文件交付给虚拟机。缺点:部分应用服务器无法完美支持自定义类加载器,所以会出现失效的可能性。
- AOL扩展,最强大也是最难掌握的方式,AspectJ就属于这种方式。
AOP相关概念
- Joinpoint,织入点
- 方法调用
- 方法调用执行
- 构造方法调用
- 字段设置
- 字段获取
- 异常处理执行
- 类初始化(类中某些静态类型或者静态代码块的初始化点)
- Poincut,Joinpoint的表述方式。参照Poincut规定的Joinpoint信息,才会明确应该往系统的哪些Joinpoint织入横切逻辑。Poinpoint表述方式:
- 直接指定Joinpoint所在方法名称。
- 正则表达式
- 使用特定的Poincut表述语言
Poincut运算,如下举例:
3.Advice,横切关注点逻辑的载体。它代表即将织入Joinpoint的横切载体。
按照advice在Joinpoint位置执行时的差异或者完成功能的不同,Advice可以分成多种形式:
- Before Advice:在Joinpoint指定位置之前执行的Advice类型。多用来做一些系统初始化工作
- After Advice:在相应连接点之后执行。该种形式又可以细划分为:
最新文章
- ShenNiu.MVC管理系统
- [MySQL Reference Manual] 10 全球化
- A记录、CNAME、MX记录、NS记录
- java 线程返回值
- 总结baiduTemplate和djangoTemplate的学习
- [Spring] - Property注入
- ERP系统开发平台 (C#语言,支持多数据库)
- DEDE数据库修改后台变量
- android -- 蓝牙 bluetooth (二) 打开蓝牙
- 富文本ckediter
- Spring3 MVC DispatcherServlet 配置问题
- LoadRunner学习笔记(二)
- IMPALA部署和架构(一)
- IDEA下使用Maven的test命令乱码
- AudioEffect中文API
- log4j(三)——如何控制不同级别的日志信息的输出?
- Java 里如何实现线程间通信
- python Anaconda 安装管理包,开发环境
- Python Socket编程基础篇
- linux下Ctrl命令组合
热门文章
- Verilog有符号整型数(signed int)比大小
- Task使用注意
- NULL判斷符
- 吴裕雄--天生自然JAVA数据库编程:PrepareStatement
- 本地连接 HDFS 报错 Exception in thread ";main"; org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=JM.H,access=WRITE, inode=";";:r
- DEDE后台升级后不显示编辑器
- 无法删除oracle用户的问题
- 通过虚拟机增加Linux的磁盘(分区容量)
- DB2的简单操作
- SpringIOC初始化过程源码跟踪及学习