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编程在开发框架本身用的比较多,而实际项目中,用的 ...
随机推荐
- Python3基础 函数 可变参数,将传进来的参数转成列表
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 使用CCleaner卸载chrome
Google Chrome Update Patches Zero-Day Actively Exploited in the Wild 如果有同事使用google Chrome浏览器的话,请检查版本 ...
- [不屈的复习] - 安装Java初始化环境
点WIN键->运行(或者使用win+r) 输入cmd命令输入java -version 注: -version是小写,不能使用大写,java后面有一个空格 配置成功后,会出现版本信息 java ...
- HDU 5884 Sort(二分+优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=5884 题意:有个屌丝设计了一个程序,每次可以将k个数组进行合并,代价为这k个数组总的长度之和.现在另外一个屌丝要 ...
- 【Python】【内置函数】【bytes&bytearray&str&array】
[bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
- PHP 高精度比较bccomp
/** * 比较大小 */ public static function compareNum($num1,$num2) { return bccomp($num1,$num2,3); // 精确到小 ...
- 3.2 x86体系结构
计算机组成 3 指令系统体系结构 3.2 x86体系结构 X86是商业上最为成功,影响力最大的一种体系结构.但从技术的角度看,它又存在着很多的问题,那我们就来一起分析X86这种体系结构的特点. 要探讨 ...
- Yet Another Ball Problem CodeForces - 1118E (简单构造)
大意: 求构造n个pair, 每个pair满足 对于每k组, 让$b_i$为$[1,k]$, $g_i$循环右移就好了 int n, k, cnt; int main() { scanf(" ...
- (转载)-关于sg函数的理解
最近学习了nim博弈,但是始终无法理解sg函数为什么sg[S]=mex(sg[S'] | S->S'),看到一篇博文解释的不错,截取了需要的几章节. 四.Sprague-Grundy数的提出 我 ...