Spring AOP基础

----------Spring之AOP--------------

为其他对象提供一种代理以控制对这个对象的访问。
代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者
增添客户需要的额外服务。

(1)  切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象。
事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,
切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。

(2)  连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常
的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个
org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。


(3) 通知(Advice): 在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,
其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。
许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。

补充:增强,在特定连接点上执行的动作,执行这个动作就相当于对原始对象的功能做了增强。


(4) 切入点(Pointcut): 匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,
并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。
切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

补充:切入点就是一组连接点的集合。

(5) 引入(Introduction): (也被称为内部类型声明(inter-type declaration))。声明额外的方法
或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。 例如,你可以
使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。

补充:为一个已有的对象动态地增加新的接口。

(6) 目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做
被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied)对象。

(7)  AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。
在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。  注意:Spring 2.0最新引入的基于模式
(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。

(8)  织入(Weaving): 把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。
这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。
Spring和其他纯Java AOP框架一样,在运行时完成织入。

补充:织入就是将切面整合到程序的执行过程中。


通知的类型:

    *

      前置通知(Before advice): 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行
      (除非它抛出一个异常)。
    *

      返回后通知(After returning advice): 在某连接点(join point)正常完成后执行的通知:例如,一个方
      法没有抛出任何异常,正常返回。
    *

      抛出异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。
    *

      后通知(After (finally) advice): 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
    *

      环绕通知(Around Advice): 包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。
      环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或
      抛出异常来结束执行。

      环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。


理解SpringAOP我们只要弄清3个对象

目标对象,切面和AOP代理

目标对象就是我们自己编写的去除了重复代码的核心类,切面则是集中了重复代码的模块,
然后在Spring的IOC中容器中以合适的方式装配起来,构成一个AOP代理,交给客户使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值