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的思想都是非常值得学习与使用的.以下 ...
随机推荐
- GPU虚拟机创建时间深度优化
桔妹导读:GPU虚拟机实例创建速度慢是公有云面临的普遍问题,由于通常情况下创建虚拟机属于低频操作而未引起业界的重视,实际生产中还是存在对GPU实例创建时间有苛刻要求的业务场景.本文将介绍滴滴云在解决 ...
- windows server 2008 r2 环境下,实现域名和IP同时都能访问一个网站
有时候,用域名访问能得到一个页面,用IP地址访问也可以得到一个页面,比如 www.baidu.com 和 61.135.169.125 都可以打开百度页面.一开始要实现这种功能,还真有点不知所措,想了 ...
- js中使用const声明变量时需要注意
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址(初始化的内容)不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. 简单 ...
- php利用快递100接口获取物流信息
PHP使用CURL调用快递100接口查询运单信息 类代码如下: <?php/** * 快递100接口调用类 * @author 齐云海 * date: 2019/05/29 */ class E ...
- mac:app已损坏,打不开。你应该将它移到废纸篓。
app已损坏,打不开.你应该将它移到废纸篓. http://bbs.feng.com/read-htm-tid-11230947.html http://www.codesec.net/view/50 ...
- Photogrammetry and Game
https://skulltheatre.wordpress.com/2013/02/11/photogrammetry-in-video-games-frequently-asked-questio ...
- 面试【JAVA基础】类加载机制
1.类加载过程 1.1.加载 查找和导入class文件. 1.2.链接 验证 检验载入的class文件的正确性,完整性. 准备 给类的静态变量分配存储空间,会赋对象类型的默认值. 解析 将class常 ...
- JQuery的Ajax实现注册检测用户名
Ajax(无需等待直接向服务器发起请求) (Asynchronous Javascript And Xml) :异步的 Google创新的一种js技术 实现方法一:比较原始没有封装的方法: //核对用 ...
- Web开发初探(系统理解Web知识点)
一.Web开发介绍 我们看到的网页通过代码来实现的 ,这些代码由浏览器解释并渲染成你看到的丰富多彩的页面效果. 这个浏览器就相当于Python的解释器,专门负责解释和执行(渲染)网页代码. 写网页的代 ...
- nginx安装步骤和加固方案
安装步骤参考https://blog.csdn.net/qq_37345604/article/details/90034424 出现以下页面就表示安装完成(默认是80端口,我修改成了8009端口,所 ...