学习 Spring (十二) AOP 基本概念及特点
Spring入门篇 学习笔记
AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
主要功能是:日志记录、性能统计、安全控制、事务处理、异常处理等
AOP 实现方式
- 预编译:AspectJ
- 运行期动态代理(JDK 动态代理, CGLib 动态代理):SpringAOP, JbossAOP
AOP 相关概念
- 切面 (Aspect):一个关注点的模块化,这个关注点可能会横切多个对象
- 连接点 (Joinpoint):程序执行过程中某个特定的点
- 通知 (Advice):在切面的某个特定的连接点上执行的动作
- 切入点 (Pointcut):匹配连接点的断言,在 AOP 中通知和一个切入点表达式关联
- 引入 (Introduction):在不修改类代码的前提下,为类添加新的方法和属性
- 目标对象 (Target Object):被一个或者多个切面所通知的对象
- AOP 代理 (AOP Proxy):AOP 框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)
- 织入 (Weaving):把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载时织入、执行时织入
Advice 的类型
- 前置通知 (Before advice):在某连接点之前执行的通知,但不能阻止连接点前的执行(除非它抛出一个异常)
- 返回后通知 (After returning advice):在某连接点正常完成后执行的通知
- 抛出异常通知 (After throwing advice):在方法抛出异常退出时执行的通知
- 后通知 (After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)
- 环绕通知 (Around advice):包围一个连接点的通知
Spring 框架中 AOP 的用途
- 提供了声明式的企业服务,特别是 EJB 的替代服务的声明
- 允许用户定制自己的切面,以完成 OOP 与 AOP 的互补使用
Spring 的 AOP 实现方式:
- 纯 java 实现,无需特殊大的编译过程,不需要控制类加载器层次
- 目前只支持方法执行连接点(通知 Spring Bean 的方法执行)
- 不是为了提供最完整的 AOP 实现,而是侧重于提供一种 AOP 实现和 Spring IoC 容器之间的整合,用于帮助解决企业应用中的常见问题
- Spring AOP 不会与 AspectJ 竞争,不会提供综合全面的 AOP 解决方案
有接口和无接口的 Spring AOP 实现区别
- Spring AOP 默认使用标准的 Jave SE 动态代理作为 AOP 代理,这使得任何接口(或者接口集)都可以被代理
- Spring AOP 中也可以使用 CGLIB 代理(如果一个业务对象并没有实现一个接口)
源码:learning-spring
学习 Spring (十二) AOP 基本概念及特点的更多相关文章
- Spring学习记录(十二)---AOP理解和基于注解配置
Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...
- 学习 Spring (十六) AOP API
Spring入门篇 学习笔记 Spring AOP API 是 Spring 1.2 历史用法,现在仍然支持 这是 Spring AOP 基础,现在的用法也是基于历史的,只是更简便了 Pointcut ...
- 学习MQ(二)基本概念
学习MQ(二)基本概念 这次简单罗列一下MQ的基本概念,还有我对它们的理解 1.queue manager 队列管理器,这是MQ系统中最上层的一个概念.每一个queue manager都有一个侦听器, ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- Spring学习(18)--- AOP基本概念及特点
AOP:Aspect Oriented Programing的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序程序功能的统一维护的一种技术 主要的功能是:日志记录,性能统计,安全控制, ...
- java jvm学习笔记十二(访问控制器的栈校验机制)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...
随机推荐
- Django 分页器
Django作为Python Web开发框架的一哥,提供了企业级网站开发所需要的几乎所有功能,其中就包括自带分页功能.利用Django自带的Paginator类,我们可以很轻松地实现分页.Django ...
- 原生js学习 选择dom
连bootstrap5 都抛弃jquery了,重新使用原生js来写,所以最近在学习原生js. 一.选择dom元素: id let sure=document.getElementById('sure' ...
- open-falcon之使用mail-provider发邮件(支持smtp SSL协议)
一.首先确定go语言安装环境配置好 1.进入官网下载源码包 https://golang.org/dl/ 2.解压缩,配置环境变量 在/etc/profile最后加上export PATH=$PATH ...
- mac 下利用AndroidStudio APK获取签名信息
注:网上没找到特别好的.不是xxx.keystore 就是debug.keystore 而真正去找这些目录的时候系统就会提示没有这个秘钥库文件.所以就悲剧了 下面附上快速查看APK签名信息的方法(SH ...
- macOS下appstore提示未能完成该操作的解决办法
macOS下App Store下载软件,提示:未能完成该操作.(com.apple.commerce.client 错误 500.) 解决办法: 在终端输入 defaults write com.ap ...
- java 加密 解密 Illegal key size
java.security.InvalidKeyException: Illegal key size 今天遇到一个奇怪的问题. 自己做的加签验签功能已经没有问题了,本地测试通过,同事放到服务器上 ...
- Java获取Window和Linux系统的项目ClassPath路径
不啰嗦,直接复制工具类 /** * 在windows和linux系统下均可正常使用 * Create by yster@foxmail.com 2018/6/6/006 14:51 */ public ...
- prometheus排错
1.导入grafana模板后node-export某些图像无法获取到data: 解决:导入grafana 模板是需要看node-export 版本是否与模板要求的一致,不同版本的node-export ...
- 避免使用HttpClient的系统代理
这两天在玩Consul, 他的.Net驱动使用了HttpClient来发送Http请求. 但是我的电脑上装有SS, 所以请求会被SS过滤一次, 然后导致请求的延迟一直比较高. 然后只需要改写一下Htt ...
- 六、input框中的数字(金额)只能输入正整数
<input type="text" placeholder="请输入整数" onkeyup="this.value=this.value.re ...