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基础 str 通过拆分字符串与插入新的内容形成新的字符串
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Zookeeper一致性协议原理Zab
ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法, ZAB(ZooKeeper Atomic Bro ...
- MySQL timespan设置 sql_mode设置
Timespan设置: 在MySQL5.7版本中创建表 CREATE TABLE `investor_seat` ( `id` int(11) NOT NULL AUTO_INCREMENT , `i ...
- JavaScript 小知识
1.var 变量 <script type="text/javascript"> var a = "hong"; var fun = functio ...
- IDEA快捷键复习使用
https://www.jetbrains.com/help/idea/meet-intellij-idea.html 快捷键可以极快地进行代码编辑整理,在IDEA的快捷键中,除了有几个好像特别难按之 ...
- UVa 1601 万圣节后的早晨
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Hadoop 部分截图
- preg_match
$baseUrl = request()->baseUrl(); if (!preg_match('/admin.php/',$baseUrl)) { $this->redirect('/ ...
- python里的apply,applymap和map的区别
apply,applymap和map的应用总结: apply 用在dataframe上,用于对row或者column进行计算: applymap 用于dataframe上,是元素级别的操作: map ...
- Java 集合-集合介绍
2017-10-30 00:01:09 一.Java集合的类关系图 二.集合类的概述 集合类出现的原因:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类. ...