学习 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 这一节,我们 ...
随机推荐
- [Micropython]TPYBoard v102 DIY照相机
摄像头(CAMERA或WEBCAM)又称为电脑相机.电脑眼.电子眼等,是一种视频输入设备,被广泛的运用于视频会议,安防系统 .图像采集系统. 环境监控 .工业现场过程控制 等方面.本实验用TPYBoa ...
- Unity编辑器:清空控制台(Console)
static MethodInfo clearMethod = null; /// <summary> /// 清空log信息 /// </summary> private s ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- 通过 JS 脚本去除csdn广告
1. chorme 浏览器 1.1 通过书签方式添加 新建书签: 在网址一栏中输入: javascript: $(function () { $('aside .csdn-tracking-stati ...
- POST BOY : Restful API 调试工具
在使用asp.net webapi开发中,一般情况下会使用一些工具来模拟请求. 其中有一款chrome浏览器插件POST MAN比较不错. 但是由于国内google服务使用不稳定,所以我自己写了一个简 ...
- log4j打印堆栈信息
原文地址:https://blog.csdn.net/xianyu_0418/article/details/6043174 大家都知道,网站在运行的过程中,打印必要的log对记录网站的运行情况.从而 ...
- Redux 入门教程(三):React-Redux 的用法
为了方便使用,Redux 的作者封装了一个 React 专用的库 React-Redux,本文主要介绍它. 这个库是可以选用的.实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React ...
- Python_每日习题_0004_一年中的第几天
# 题目 输入某年某月某日,判断这一天是这一年的第几天? # 程序分析 特殊情况,闰年时需考虑二月多加一天: def isLeapYear(y): return (y%400==0 or (y%4== ...
- (Beta)Let's-版本测试报告
测试中发现的Bug Version 2.0 Bug List 在无活动的活动列表下拉加载会崩溃 不能更改个人头像 用户和活动不显示头像 百度地图无法打开 在某些机型上软件装不上 图片加载有时不加载,有 ...
- 面向对象设计的SOLID原则、迪米特法则
SPR(The Single Responsibility Principle):单一责任原则 OCP(The Open Closed Principle):开放封闭原则 LSP(The Liskov ...