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基础 time 索引值访问元组中的年月日时分秒
			Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ... 
- Linux多线程--使用互斥量同步线程【转】
			本文转载自:http://blog.csdn.net/ljianhui/article/details/10875883 前文再续,书接上一回,在上一篇文章:Linux多线程——使用信号量同步线程中, ... 
- aws相关文档
			使用 IAM 角色授予对 Amazon EC2 上的 AWS 资源的访问权 https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-gu ... 
- js分号的重要性
			js中语句末尾可以不加分号, 很多时候在做练习或写几个页面时,我都是不会加的.虽然知道加了会好一点.但就是觉得很敲一句就要多按一次分号键(;)来加分号,而不加也不怎么样,然后就不想加了. 也听说在对j ... 
- POJ 2976 Dropping tests(分数规划)
			http://poj.org/problem?id=2976 题意: 给出ai和bi,ai和bi是一一配对的,现在可以删除k对,使得的值最大. 思路: 分数规划题,可以参考<挑战程序竞赛> ... 
- C++中的也能使用正则表达式----转载
			转自:https://www.cnblogs.com/ittinybird/p/4853532.html, 以作笔记. 正则表达式Regex(regular expression)是一种强大的描述字符 ... 
- Hibernate与iBastis 比较(转载)
			Hibernate VS iBATIS 简介 Hibernate 是当前最流行的O/R mapping框架,当前版本是3.05.它出身于sf.net,现在已经成为Jboss的一部分了 iBATIS ... 
- Codeforces Round #289 (Div. 2, ACM ICPC Rules) E. Pretty Song 算贡献+前缀和
			E. Pretty Song time limit per test 1 second memory limit per test 256 megabytes input standard input ... 
- ubuntu16.04中开启和关闭防火墙
			开启防火墙 ufw enable 关闭防火墙 ufw disable 
- 字典重复key的合并
			from collections import defaultdict d=defaultdict(set) s=[("001","A"),("001 ... 
