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把引入通知作为一种特殊的拦截通知,适用于类,不能和切入点一起使用

posted @ 2018-02-08 18:02  邀魂斩月  阅读(161)  评论(0编辑  收藏  举报