Spring的AOP

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 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标,这种关系可由 IoC 容器的依赖注入提供。Spring 默认使用 Java 动态代理来创建 AOP 代理, 这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候, Spring 自动会切换为使用 CGLIB 代理,也可强制使用 CGLIB。 

AOP 编程其实是很简单的事情。纵观 AOP 编程, 其中需要程序员参与的只有三个部分:

 

  • 定义普通业务组件。
  • 定义切入点,一个切入点可能横切多个业务组件。
  • 定义增强处理,增强处理就是在 AOP 框架为普通业务组件织入的处理动作。

 

所以进行 AOP 编程的关键就是定义切入点和定义增强处理。一旦定义了合适的切入点和增强处理,AOP 框架将会自动生成 AOP 代理,即:代理对象的方法 = 增强处理 + 被代理对象的方法

Spring 中 AOP 的实现及编程实例:

http://blog.csdn.net/a906998248/article/details/7514969

 

在调用切面的指定时,可以指定某个类的所有方法都调用方面,也可以指定某个类中的某个方法。此时由于用到正则表达式,于是需要引入jakarta-oro-2.0.8.jar 包。

可以在方法前后,前,后,发生异常时调用切面的代码。

创建AOP代理的两种方法:

1 、用ProxyFactoryBean创建AOP代理

2 、用DefaultAdvisorAutoProxyCreator创建自动代理---现在更多的使用BeanNameAutoProxyCreator

两种方法具体属性解读:

http://www.cnblogs.com/65702708/archive/2012/08/14/2638043.html

Spring两种代理方式

Java动态代理(对接口的代理)

CGLIB代理:在没有接口的情况下Srping通过设置proxyTargetClass等于 true来使用CGLIB代理,CGLIB是一种面向继承的代理方式。同时还有一个proxyTarget属性用来指定代理的目标对象类。

 

Advice类的书写:

http://zlk.iteye.com/blog/694423

 

参考文献:

http://www.blogjava.net/sslaowan/archive/2007/01/31/97016.html

 

posted on 2015-02-04 16:23  dobestself_994395  阅读(155)  评论(0编辑  收藏  举报