Spring AOP 学习笔记 (摘自sping3.x企业应用开发实战)
AOP, Aspect Oriented Programming的简称,面向切面编程,适用于具有横切逻辑的应用场景,比如性能检测,访问控制,事务管理以及日志记录。为消除分布在业务代码中的重复非业务代码而出现的。
连接点(JoinPoint)
程序执行的某个特定位置:类初始化前后,方法调用前后,异常抛出后。Spring只支持方法的连接点,连接点是APO向目标类打入楔子的选择点。连接点由两个信息确定:
1. 方法表示的程序执行点,比如方法foo()
2.用相对点表示的方位,如foo()执行前的位置,方位在增强类型中定义。
切点(PointCut)
切点用于定位连接点,。连接点类似数据库中记录,而切点相当于查询条件,一个切点可以匹配多个连接点。Spring使用类和方法作为连接点的查询条件。
增强(Advice)
织入到目标类连接点上的一段程序代码(像不像黑客行为?)。包含
1. 程序代码
2.执行点的方位, 结合切点信息便可找到连接点
Target advice织入的目标类
引介Introduction
特殊的增强,为类添加一些属性和方法,可以为一些业务类动态添加没有实现的接口的实现逻辑,让该业务类成为接口的实现类。
织入(Weaving)
将Advice添加到target具体连接点上的过程。AOP具有三种织入方式:
1. 编译期织入:要求使用特殊的java编译器, AspectJ使用该种方式。
2. 类装载期织入:要求使用特殊的类装载器,AspectJ使用该种方式。
3.动态代理织入: 在运行期为目标类添加增强, Spring便是采用这种方式。
代理(Proxy)
Advice+Target = Proxy,即可以是和原类具有相同接口的类,也可以是原类的子类。
切面(Aspect)
由切点和增强(引介)组成,包括了横切逻辑,也包括了连接点的定义,Spring AOP就是负责实施切面的框架,它将切面所定义的逻辑织入到切面所制定的连接点中。
强烈推荐的书:
Spring3.x 企业应用开发实战(电子工业出版社)