Spring AOP

一、AOP:面向切面编程

二、AOP中的术语

1.切面:使用@Aspect修饰的类,

2.连接点:程序执行过程中明确的点,插入切面的地点,如对方法的调用,方法返回,抛出异常等。

3.通知:连接点所要触发的增强处理,切面的实际实现,通知在连接点插入到应用系统中。

  A.前置通知:在连接点之前执行的通知,不能阻止的目标方法执行。

  B.后置通知:目标方法结束时织入,不过成功完成或异常中止,都会被织入。

  C.返回后通知:在目标方法成功完成后织入。

  D.环绕通知:环绕目标方法,类似Web中Servlet规范中的Filter的doFilter方法,可以决定目标方法在什么时候执行,如何执行,阻止目标方法的执行。

  E 抛出异常后通知:在目标方法抛出异常退出时执行的通知。

通知执行顺序:

前置通知→环绕通知连接点之前→连接点执行→环绕通知连接点之后→返回通知→后置通知

                                                                  →(如果发生异常)异常通知→后置通知

4.切入点: 定义了通知应该应用在哪些连接点,如Before(“execution(* org.php.service.impl.*.*(..))”)

5. 目标对象:被通知的对象。既可以是你编写的类也可以是第三方类。

6. AOP代理:将通知应用到目标对象后创建的对象,应用系统的其他部分不用为了支持代理对象而改变。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理,前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。

7. 织入:将通知添加到目标对象从而创建一个新代理对象的过程。

  织入的实现方式:

      编译期:切面在目标对象编译时织入.这需要一个特殊的编译器(例如AspectJ)

      类装载期:切面在目标对象被载入JVM时织入.这需要一个特殊的类载入器.

      运行期:切面在应用系统运行时织入.(例如CGLIB)

三.Spring AOP的几种实现方式

1. 基于代理的AOP

  1)前置增强:BeforeAdvice,表示在目标方法执行前实施增强。

  2)后置增强:AfterReturningAdvice,表示在目标方法执行后实施增强。

  3)环绕增强:MethodInterceptor,表示在目标方法执行前后实施增强

  4)异常增强:ThrowsAdvice,表示在目标方法抛出异常后实施增强

  5)引入增强:Introduction, org.springframework.aop.IntroductionInterceptor

2. @Aspect注解形式的

3.@<aop:config>基于配置的

延伸阅读:http://my.oschina.net/huangyong/blog/161338

原文地址:https://www.cnblogs.com/dapeng520/p/4659479.html