读书笔记-aop基础

java 4 2016-02-29 13:03
女装

aop是什么

aop是面向切面编程(aspect oriented programing)的简称。aop的出现并不是要完全替代oop,仅是作为oop的有益补充。
aop的应用场合是有限的,一般只适合于那些具有横切逻辑的应用场合。

  • 性能监测

  • 访问控制

  • 事务管理

  • 日志记录
    ...

aop中的概念

连接点(joinpoint)

一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为连接点。比如,

  • 类开始初始化前,后

  • 类中某个方法调用前,后

  • 方法抛出异常后
    ...

连接点由两个信息确定:

  1. 用方法表示的程序执行点

  2. 用相对点表示的方位

如在Test.foo()方法执行前的连接点,执行点为Test.foo(),方位为该方法执行前的位置。
spring使用切点对执行点定位,而方位则在增强类型中定义.

切点(pointcut)

每个程序类都可能有多个连接点,aop通过切点定位特定点。类比于数据库查询:连接点相当于数据库中的记录,切点相当于查询条件。
切点和连接点不是一对一关系,一个切点可以匹配多个连接点。
切点只定位到某个方法上,如果希望定位到具体的连接点上,还需要提供方位信息。

增强(advice)

增强是织入到目标类连接点上的一段代码.它除用于描述一段代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位。结合执行点方位信息和切点信息,就可以找到特定的连接点了。
spring提供的增强接口都是带方位名的:BeforeAdvice,AfterReturningAdvice,ThrowsAdvice等。

目标对象(target)

增强逻辑的织入目标类。

引介(introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原来没有实现某个接口,通过引介,也可以动态的为业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。

织入(weaving)

织入是将增强添加对目标类具体连接点的过程。aop有三种织入方式:

  1. 编译期织入,这要求使用特殊的java编译器

  2. 类装载期织入,这要求使用特殊的类装载器

  3. 动态代理织入,在运行期为目标类添加增强,生成子类

spring使用第3种方式织入,aspectj使用第1,2种方式。

代理(proxy)

一个类被aop织入增强后,就产生一个结果类,它融合了原来类和增强逻辑的代理类。我们可以采用调用原来类相同的方式调用代理类。

切面(aspect)

切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义。spring aop负责实施切面,它将切面所定义的横切逻辑织入到切面所指定的连接点钟。

创建增强类

前置增强

场景:高级餐厅的服务员在回答顾客之前都会说'你好!...'.


                    
女装
文章评论