转载地址:http://blog.csdn.net/pingnanlee/article/details/11537809
Spring AOP概述
AOP(Aspect Oriented Programming)面向切面编程.是一种比较新颖的设计思想.是对OOP(Object Orientd Programming)面向对象编程的一种有益的补充.
1、OOP和AOP
OOP对业务处理过程中的实体及其属性和行为进行了抽象封装,以获得更加清晰高效果的逻辑划分.研究的是一种“静态的”领域。AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段.研究的是一种“动态的”领域。
2、AOP的基本术语
1)切面Aspect
业务处理过程中的一个截面.就像权限检查.通过切面,可以将不同层面的问题隔离开:比如浏览帖子和权限检查两者互不相干。这样一来,也就降低了耦合性,我们可以把注意力集中到各自的领域中.
2)连接点JoinPoint
程序运行中的某个阶段点.如某个方法的调用,或者异常的抛出等.
3)处理逻辑Advice
在某个连接点采取的逻辑.这里的逻辑有三种:
Around 在连接点前后插入预处理和后处理过程.
Before 在连接点前插入预处理过程.
Throw 在连接点抛出异常的时候进行异常处理.
4)切点PointCut
一系列连接点的集合,它指明处理逻辑Advice将在何在被触发.
Spring AOP实现机制
1、Spring内置AOP机制
基于动态AOP机制的实现.所谓动态AOP,其实就是动态Proxy模式,在目标对象的方法前后插入相应的代码.Spring AOP中的动态Proxy模式,是基于Java Dynamic Proxy(面向Interface)和CGLib(面向Class)的实现。
这是动态代理生成的函数代码,Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); 函数要求获取目标对象的所有接口方法,若目标对象不是基于接口的,则这种方式无法生成代理对象,所以有了CGLib的方式。即没有实现任何接口的类,就必须使用CGLib来动态构造代理类。而且CGLib构造的代理类是目标类的一个子类(需要实现MethodInterceptor接口等)
2、扩展AOP机制
可以使用自定义类加载器和实现字节码转换器
(具体参考http://www.iteye.com/topic/1116696)
3、AOP的配置方式
1)使用ProxyFactoryBean的代理
2)使用注解的aop代理,<aop:aspectj-autoproxy/>
3)使用配置文件的方式 <aop:config>
(具体实现参考:http://xuxiaolei.iteye.com/blog/414162)