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的思想都是非常值得学习与使用的.以下 ...
随机推荐
- Arduboy基本用法(一)
Arduboy基本用法(一) 一.第一个Arduboy程序 在arduino中新建项目 示例代码 #include<Arduboy.h> Arduboy arduboy; void set ...
- Windows Server 2012 两台服务器文件同步
下载cwRsyncServer软件安装(这是Windows下的文件同步软件) 一.(1)在文件客户端服务器安装该软件,找到安装位置下的rsyncd.conf,修改配置文件(注意在Windows下输入位 ...
- 状态压缩动态规划(状压DP)详解
0 引子 不要999,也不要888,只要288,只要288,状压DP带回家.你买不了上当,买不了欺骗.它可以当搜索,也可以卡常数,还可以装B,方式多样,随心搭配,自由多变,一定符合你的口味! 在计算机 ...
- LCA详解
LCA,即最近公共祖先,在图论中应用比较广泛. LCA的定义如下:给定一个有根树,若节点$z$同时是节点$x$和节点$y$的祖先,则称$z$是$x,y$的公共祖先:在$x,y$的所有公共祖先当中深度最 ...
- 解决Oracle12cr2自创建用户无法登录的问题
说明: 下面创建是创建CDB本地用户,不是PDB应用程序用户,如果是PDB应用程序创建语法会不一样.下面介绍创建CDB本地用户. 创建表空空间 CREATE TABLESPACE YH datafil ...
- python爬虫--看看虎牙女主播中谁颜值最高
目录 爬虫 百度人脸识别接口 效果演示 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...
- Sorting It All Out (拓扑排序+思维)
An ascending sorted sequence of distinct values is one in which some form of a less-than operator is ...
- D - 英文题 (多组背包)
The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a gian ...
- .Net在Windows上使用Jenkins做CI/CD的那些事
背景 最近入职了一家新公司,公司各个方面都让我非常的满意,我也怀着紧张与兴奋的心情入职后,在第一天接到了领导给我的第一个任务——把整个项目的依赖引用重新整理并实施项目的CI/CD. 本篇的重点主要分享 ...
- HTTPS建立过程
由于HTTPS建立过程经常忘记,固记录 HTTPS建立流程 客户端发起SSL连接 服务端发送证书(证书中包含了服务端公钥) 客户端根据已有证书判断是否是可信任的(客户端决定是否继续) 服务端要求客户端 ...