19_AOP概述

【AOP的使用场景】

性能测试

访问控制

事务管理

日志记录

 

【AOP相关术语】

[ 连接点 Joinpoint ]

  程序执行的某个特定位置。(假如Car类有drive()方法,那么在drive()方法之前,drive()方法之后,或者方法抛出异常之后,这些即为连接点)Spring仅仅支持方法的连接点,即仅能在方法调用前、调用后、方法调用前后、方法抛出异常时这些连接点执行织入增强。

  连接点由两个信息确定:

  1.方法表示的程序的执行点。如Car类的drive()方法。

  2.用相对点表示的方位。如Car类的drive()方法之前、之后、前后或抛出异常。

[ 切点 Pointcut ]

  一个类可能有多个连接点(如Car类的有多个方法),切点的存在是为了“定位”连接点。假如多个连接点是数据库中的多条数据,切点相当于查询条件。注意:一个切点可以匹配多个连接点(正如SQL语句的Select可以查询多条数据)。

  在Spring中连接点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条件。由于连接点是方法的执行前、后的包括方位信息的具体程序执行点,注意切点只定位到某个方法上(还没有包含方位,方位由增强Advice提供)。

(切点:定位某个方法  连接点:定位方法前、方法后......)

[ 增强 Advice ]

  增强是织入到目标类的连接点上的一段程序代码。

  在Spring中,增强除了包含一段程序代码外,还包含了连接点的方位信息。

  正由于增强的者两部分组成,Spring的增强接口都是带方位名称的:BeforeAdvice、AfterReturning、ThrowsAdvice等。

  注意:只有切点和增强一块才能确定具体的连接点,并执行增强的代码。

[ 目标对象 target ]

  增强织入的目标类。

[ 引介 Introduction ]

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

[ 织入Weaving ]

  将增强添加到目标类的具体连接点的过程。

  AOP的织入有三种方式:

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

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

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

  Spring采用的是3.动态代理织入的方式,而AspectJ采用1,2方式的织入。

[ 代理 Proxy ]

  一个类被AOP织入增强后,就产生了一个结果类,它是融合了原来类和增强逻辑的代理类。

  按照不同代理方式,代理类即可能是和原来类具有相同的接口,也可能是原来类的子类。

[ 切面 Aspect ]

  切面由" 切点+增强(或引介) "组成。它既包含了横切逻辑的定义,也包括了连接点的定义。

  SpringAOP就负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。

 

posted @ 2017-01-19 19:49  HigginCui  阅读(228)  评论(0编辑  收藏  举报