AOP指面向切面的编程:所谓切面,就是指日志、权限、异常处理、事物管理、安全检查、缓存、对象池管理等具有横切性质的系统性服务。面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程。
AOP中的三个关键概念:
切入点(Pointcut):Pointcut 是 Join Point 的集合, Join Point 就是需要注入 Adivce 的位置,也就是需要插入日志输出代码、事务处理代码等“方面”( Aspect ,也就是 AOP 中的 A )代码的地方。
通知( Advice ): 就是指 Join Point 对应的代码(方法)。比如日志输出这个方面,指的就是日志输出的代码或方法了。在 Spring 中,它对应类(class )。
Advisor : 是 Poincut 和 Advice 的配置器,它包括 Pointcut 和 Advice ,是将 Advice 注入程序中 Pointcut 位置的代码。
原理图:
如图:AOP 实际上是由目标类的代理类实现的。AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异,AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法。
Spring 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标,这种关系可由 IoC 容器的依赖注入提供。Spring 默认使用 Java 动态代理来创建 AOP 代理, 这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候, Spring 自动会切换为使用 CGLIB 代理,也可强制使用 CGLIB。
AOP 编程其实是很简单的事情。纵观 AOP 编程, 其中需要程序员参与的只有三个部分:
所以进行 AOP 编程的关键就是定义切入点和定义增强处理。一旦定义了合适的切入点和增强处理,AOP 框架将会自动生成 AOP 代理,即:代理对象的方法 = 增强处理 + 被代理对象的方法。
http://blog.csdn.net/a906998248/article/details/7514969
在调用切面的指定时,可以指定某个类的所有方法都调用方面,也可以指定某个类中的某个方法。此时由于用到正则表达式,于是需要引入jakarta-oro-2.0.8.jar 包。
可以在方法前后,前,后,发生异常时调用切面的代码。
两种方法具体属性解读:
http://www.cnblogs.com/65702708/archive/2012/08/14/2638043.html
Advice类的书写:
http://zlk.iteye.com/blog/694423
参考文献:
http://www.blogjava.net/sslaowan/archive/2007/01/31/97016.html