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的思想都是非常值得学习与使用的.以下 ...
随机推荐
- 配置tomacat外部应用
原来我们的项目一般放置在tomcat文件夹的webapp下,现在我放到外面,也希望tomact可以找到他
- MySQL添加外键报错 - referencing column 'xx' and referenced column 'xx' in foreign key constraint 'xx' are incompatible
MySQL给两个表添加外键时,报错 翻译意思是:外键约束“xx”中的引用列“xx”和引用列“xx”不兼容 说明两个表关联的列数据类型不一致,比如:varchar 与 int,或者 int无符号 与 i ...
- Ubuntu 16.04 安装CP210x,CH340驱动
CH340 https://github.com/juliagoda/CH341SER CP210x 因为源码版本不是linux-source-4.15.0-91-generic,导致error,一个 ...
- 没想到,Git居然有3种“后悔药”!
没想到,Git居然有后悔药! 你知道Git版本控制系统中都有哪些"后悔药"吗? 本文通过案例讲解git reset . git revert . git checkout在版本控制 ...
- Android Studio开发工具常用快捷键。部分总结,不全面,只包含新手可能少用的
Android Studio开发工具常用快捷键.部分总结,不全面,只包含新手可能少用的 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 首先说明,因为 ...
- android MVVM(1)用LiveData关联VM 与 V
1.官方文档 MVVM 官方文档: https://developer.android.com/jetpack/docs/guide ViewModel 文档: https://developer.a ...
- 【Unity C#编程】自定义数据
译林军 灰魅|2014-03-04 10:52|10589次浏览|Unity(315)移动应用(31)技术开发(16)0 在这篇Unity C#的文章中,你将会创建一个简单的数据结构,然后写下它的属性 ...
- 解读AngularJS的setupModuleLoader函数
http://www.cnblogs.com/whitewolf/p/angular-module-declare-and-get.html 看了上面这篇文章,自己读了一下代码,以下是个人理解,如有请 ...
- vant ui TabBar封装
TabBar.vue基本上是放在App.vue里面,都存在 <template> <div id="app"> <home-tab-bar :tar- ...
- linux常用命令及配置文件
linux常用命令 基于centos 以我自己实际使用情况来说,从最常用的开始开始,大致如下: 1. 基本命令 cd ls ll(ls -l 别名 ) cat vi/vim touch echo mk ...