spring aop 的理解
spring aop的相关概念(所有的概念都是为了生成代理类这个过程所需要的信息的抽象):
1.Targer:目标对象。被代理的对象。
2.Advice:增强/通知。就是为目标对象扩展的功能。分为前置增强、后置增强,异常增强,最终增强,环绕增强。
3.Pointcut:切入点。指明增强要在目标对象的那些方法上使用。
4.Aspect:切面。就是增强(通知)和切入点的集合。如果一个切面没有切入点,那么增强就是一个切面,这个使用增强应用在目标类的所有方法上
5.Joinpoint:连接点。用来在增强的中获取目标对象信息的对象(主要用在aspectj方式配置的时候。传统的方式配置的时候可以直接通过方法传递过来的参数得到目标类的信息)
6.Introduction:引介。一种技术,一种特殊的通知在不修改类代码的前提下,可以在运行期为类动态地添加一些方法或Field.
7.Weaving:织入。一种技术,把增强应用到目标对象,生成代理对象的过程
8.Proxy:代理。就是和目标和有相同的方法名对象。该方法内部是增强代码和目标对象同名方法代码的集合(即目标方法功能被扩展了)
9.spring采用动态代理织入,而AspectJ采用编译期织入和类转载期织入
参考链接:
http://blog.csdn.net/lutianfeiml/article/details/51744488 这篇文章配置aop的方式讲的有点乱
具体的配置方式参见:
http://www.cnblogs.com/jacksonshi/p/5863313.html
aspectj的表达式参考链接:
http://jinnianshilongnian.iteye.com/blog/1415606
总结:
1.需要注意的通知:
1)后置通知配置的增强的时候需要加上returning属性,该增强中可以通过传递进来的Object对象获得目标方法的返回值;
2)异常通知配置的时候需要加上throwing属性,该增强中可以通过传递进来的Throwable对错获得目标方法发送异常的信息;
3)环绕通知 要通过传递进来的ProceedingJoinPoint对象,调用jointPoint方法来决定是否执行目标方法,然后在该方法前后添加前后逻辑,达到环绕的效果,最后手动返回目标方法执行的返回值,如果有的话
2.关于各种通知执行的顺序
1)如果是采用aspectj 的xml文件配置的方式,执行的顺序首先是 首先根据通知定义顺序执行,比如前置通知一定在通知前面执行,可以互相影响的情况下是按xml中配置的顺序执行的,比如前置通知 和环绕通知,后置通知和最终通知等。
2)如果是以注解方式配置的,系统好像(我自己测试的现象是这样,有待确认)有默认的执行顺序。
(
环绕通知 前
前置通知
eat
环绕通知 后
最终通知
后置通知9
9
)
3.aspectj 注解和xml配置的区别
1)注解方式和xml配置可以共存
2)同一个异常通知,前置通知,最终通知,后置通知对目标对象的方法配置了几次,那么运行的时候就运行几次,但是环绕通知不行,会报错
3)xml配置的方式比注解方式更通用,如果要通知执行顺序 要有严格的把握以及增强没有源代码的情况下,建议使用xml配置的方式配置aop
注意以上,不保证正确,只是我自己的笔记,如有有错误,欢迎指正。
spring aop 的理解的更多相关文章
- Spring AOP深入理解之拦截器调用
Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动 ...
- Spring Aop的理解和简单实现
1.AOP概念 所说的面向切面编程其实就是在处理一系列业务逻辑的时候这一系列动作看成一个动作集合.比如连接数据库来说: 加载驱动-----获取class--------获取连接对象-------访问数 ...
- Spring AOP概念理解
1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下子让你不知所措,心想着:怪不得很多人都和我说aop多难多难.当我看进去以后 ...
- Spring AOP的理解和使用
AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中. 掌握AO ...
- Spring AOP的理解(通俗易懂)。
转载 原文链接:http://www.verydemo.com/demo_c143_i20837.html 这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 1. ...
- 对Spring AOP的理解
AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善. AOP在spring ...
- Spring——<aop:scoped-proxy/>理解
首先看一下Spring文档上的两个例子对比: <bean id="userPreferences" class="com.foo.UserPreferences&q ...
- spring aop简单理解
aop原理是spring帮我们封装了动态代理,然后我们只管写具体的业务,我们将公共业务也写到具体的一个类中并实现spring为我们提供的对应要连接切入哪个位置的接口,然后再xml中配置它们的关系即可. ...
- Spring AOP 简单理解
AOP技术即(面向切面编程)技术是在面向对象编程基础上的发展,AOP技术是对所有对象或一类对象编程.核心是在不增加代码的基础上,还增加了新的功能.AOP编程在开发框架本身用的比较多,而实际项目中,用的 ...
随机推荐
- Farey Sequence (素筛欧拉函数/水)题解
The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...
- Maven profile 打包分环境加载不同的资源文件
在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发.测试.正式. 各个环境之间的参数各不相同,比如mysql.等不同环境的host不一样,若每个环境都手动替换环境很容易出错,这里我们利用 ...
- [luogu 2458][SDOI2006]保安站岗
题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...
- v-pre原样输出&&v-once只加载一次
html <div id="app"> <div v-pre>{{message1}}</div><!--原样输出--> <b ...
- 正则表达式及R字符串处理之终结版
http://yphuang.github.io/blog/2016/03/15/regular-expression-and-strings-processing-in-R/ 0.动机:为什么学习字 ...
- SetCommMask
SetCommMask 用途:设置串口通信事件 原型:BOOL SetCommMask(HANDLE hFile, //标识通信端口的句柄 DWORD dwEvtMask ...
- 爬虫框架pyspider的使用
j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: ...
- HDU 6124 Euler theorem
Euler theorem 思路:找规律 a 余数 个数 1 0 1 2 2 0 2 ...
- php将中文符号全部替换为英文符号
php将中文符号全部替换为英文符号 一.总结 一句话总结:可以用简单替换和规律替换 简单替换 str_replace() 规律替换 均相差 65248 方法一:简单替换(php代码) $val1=st ...
- C++STL1--set
C++STL1--set 一.说明 set的用法:单一元素,自动排序set的方法:用编译器的提示功能即可,不需要自己记 二.简单测试 /* 安迪的第一个字典 set的用法:单一元素,自动排序 set的 ...