Spring学习(八)--Spring的AOP
自工作以后身不由己,加班无数,996、995不可控制,高高立起的flag无法完成,无奈,随波逐流,尽力而已!
1、advice通知
advice主要描述Spring AOP 围绕奥方法调用而注入的切面行为,具体的接口定义在org.aopalliance,aop.Advice中,通过接口提供了更具体的通知类型:BeforAdvice、AfterAdvice、ThrowAdvice等。
2、Pointcut切点
Pointcut决定Advice通知作用在哪个连接点,通过Pointcut来定义需要增强的方法的集合。
在Pointcut的接口基本定义中,需要返回一个MethodMatcher,有MethodMatcher来判断对当前方法的调用是否需要增强,是否对当前调用的方法执行配置好的Advice通知。
3、Advisor通知器
通过Advisor通知器把切面增强设计和关注点的设计结合起来。
在DefaultPointcutAdvsior中,通过属性advice和pointcut两个属性完成对Advice通知和Pointcut切点的配置和组合。
在DefaultPointcutAdvsior中Pointcut默认为Pointcut.True,Pointcut.True在Pointcut接口中被定义为Pointcut True = TruePointcut,INSTANCE,
TruePointcut,INSTANCE是一个单件,使用Static属性持有单件实例,使用private私有构造函数来确保除了当前单件实现中,单间不会再次创建和实例化,保证单件特性。
4、AOP的实现--JVM动态代理特性
Spring AOP核心是动态代理,动态代理是JDK的一个特性,通过JDK特性,可以为任意Java对象创建代理对象,这个特性是通过Java Reflection API来完成的。
JDK的proxy实现:在Java的reflection包中看到Proxy对象,这个对象生成后,作用和Proxy模式中proxy对象作用一样。使用时为proxy对象设计一个回调方法,回调方法中加入作为代理额外处理的动作,回调方法需要实现InvocationHandler这个接口,接口中声明一个invoke方法,invoke方法的第一个参数还代理对象实例,第二个是参数方法Meahod的对象,表示当前proxy被调用的方法,最后一个参数是被调用的方法中的参数。

proxy和invoke连接:通过调用Proxy.newIntance方法生成具体Proxy对象的过程中把InvocationHandler设置到参数里。
proxy静态类图:
RealSubject为目标对象,代理模式中设计一个接口和目标一致的代理对象Proxy,他们都实现了接口Subject的request方法,这种情况下,对目标对象RealSubject的调用就会被Proxy拦截下来,为对目标对象的操作进行铺垫。

Proxy模式调用关系:
如果客户Client调用Proxy的request方法,会在调用目标对象的request方法前后进行一系列的处理,这些处理目标对象是不知道的。

5、建立AopProxy代理对象
通过配置和调用Spring的ProxyFectoryBean建立AOP的Proxy代理对象。
AOP的Proxy代理对象建立类的继承关系:

ProxyFactory和ProxyFactoryBean提供了AOP功能的封装,其中ProxyFactory需要编程式的使用AOP功能,ProxyFactoryBean可以在IOC容器中完成声明式的配置。
AspectJProxyFactory用来集成Spring和AspectJ。
AdvisedSupport不同于ProxyConfig在于AdvisedSupport中封装了对Advice通知和Advisor通知器相关操作。
Spring学习(八)--Spring的AOP的更多相关文章
- Spring学习(八)-----Spring注入值到集合类型的例子
下面例子向您展示Spring如何注入值到集合类型(List, Set, Map, and Properties). 支持4个主要的集合类型: List – <list/> Set – &l ...
- Spring学习(十一)-----Spring使用@Required注解依赖检查
Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...
- Spring学习(六)-----Spring使用@Autowired注解自动装配
Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...
- Spring学习之第一个AOP程序
IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...
- Spring学习笔记IOC与AOP实例
Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...
- Spring学习记录(十二)---AOP理解和基于注解配置
Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...
- Spring学习八----------Bean的配置之Resources
© 版权声明:本文为博主原创文章,转载请注明出处 Resources 针对于资源文件的统一接口 -UrlResource:URL对应的资源,根据一个URL地址即可创建 -ClassPathResour ...
- spring学习(三) ———— spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
- Spring学习【Spring概述】
从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...
随机推荐
- 赫然:Windows Live Writer 批量博客更新软件使用教程
http://www.wocaoseo.com/thread-144-1-1.html 推广人员需要使用多个博客,一个一个登陆更新是很麻烦的事情,网上的桌面批量更新博客软件也不少,今天在此推荐大家使用 ...
- 2020,8种必备Selenium编写自动化用例的技巧
在开始自动化时,您可能会遇到各种可能包含在自动化代码中的方法,技术,框架和工具.有时,与提供更好的灵活性或解决问题的更好方法相比,这种多功能性导致代码更加复杂.在编写自动化代码时,重要的是我们能够清楚 ...
- python123期末四题编程题 -无空隙回声输出-文件关键行数-字典翻转输出-《沉默的羔羊》之最多单词
1. 无空隙回声输出 描述 获得用户输入,去掉其中全部空格,将其他字符按收入顺序打印输出. ...
- Htmlcss学习笔记2——选择器与常用样式
CSS引入类型 行内样式 内联样式 外部样式表 CSS选择器 基本选择器 复合选择器 伪类选择器 属性选择器 CSS字体样式 font-size font-family font-style font ...
- RVO+CA
http://gamma.cs.unc.edu/RVO/ http://gamma.cs.unc.edu/CA/ https://arongranberg.com/astar/docs/writing ...
- WebStorm 运行Rect Native 项目
今天教大家如何直接使用WebStorm这个IDE直接完成编码+运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations. ...
- Selenium学习整理(Python)
1 准备软件 Selenium IDE firebug-2.0.19.xpi firepath-0.9.7-fx.xpi Firefox_46.0.1.5966_setup.exe 由于火狐浏览器高版 ...
- Brackets(括号最大匹配问题(区间dp))
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- Codehorses T-shirts (map+遍历)
Codehorses has just hosted the second Codehorses Cup. This year, the same as the previous one, organ ...
- python爬取拉勾网职位信息-python相关职位
import requestsimport mathimport pandas as pdimport timefrom lxml import etree url = 'https://www.la ...