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