Spring AOP

Posted 邀魂斩月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP相关的知识,希望对你有一定的参考价值。

 所有基于配置文件的aspect只支持singleton模式

在aop:config标签中添加 proxy-target-class="true" 即可改变AOP实现方式。(默认值为false)

高版本spring自动根据运行类选择JDK或CGLIB代理,我们无需设置proxy-target-class属性,JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式,一般采用前者,因为前者效率高。后者不建议使用。

使用cglib需要两个jar包:asm.jar和cglib.jar

(不知为何,实际开发中业务对象实现了接口反而必须用cglib,不知道哪里出了问题)

 

 

 

 

 

 

AOP例子:

对应配置文件:

 

 

before advice,只在进入方法之前被调用,可以在连接点执行之前插入自定义行为,但不能改变返回值

throws advice,如果连接点抛出异常,throws advice在连接点返回后被调用;如果throws advice的方法抛出异常,那么它将覆盖原有异常

after returning advice,可以访问连接点返回值(但不能修改)、被调用的方法、方法的参数和目标;如果抛出异常将会跑出拦截器链,替代返回值

introduction advice,spring把引入通知作为一种特殊的拦截通知,适用于类,不能和切入点一起使用

以上是关于Spring AOP的主要内容,如果未能解决你的问题,请参考以下文章

源码学习之AOPSpring AOP使用

AOPSpring大法有多好约定编程

关于Spring——AOP

关于Spring——AOP

AOPspring 的AOP编程报错:[Xlint:invalidAbsoluteTypeName]error

框架 - Spring 源码一步步深入