学习 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:安装和启动
最近在学习利用python语言进行web站点开发,使用的框架是Django.这篇博客主要介绍Django的安装和简单使用. 一.Django介绍 Django是一个开源的Web应用框架,由Python ...
- glance系列二:glance部署及操作
一 简单架构图示参考 更新中... 二 部署glance yum install memcached python-memcachedsystemctl enable memcached.servic ...
- 生产者消费者 ProducerConsumer
生产者消费者是常见的同步问题.一个队列,头部生产数据,尾部消费数据,队列的长度为固定值.当生产的速度大于消费的速度时,队列逐渐会填满,这时就会阻塞住.当尾部消费了数据之后,生产者就可以继续生产了. 生 ...
- python3 urllib及requests基本使用
在python中,urllib是请求url连接的标准库,在python2中,分别有urllib和urllib,在python3中,整合成了一个,称谓urllib 1.urllib.request re ...
- koa服务器搭建基础
之前我一直使用rails搭建网站.rails与koa的基本理念很相似,都是基于中间件提供一层层的服务.所不同的是,rails有很多内置的中间件,这使得开发者只需要关注MVC模块以及页面路由.而Koa这 ...
- Mysql数据库中索引的概念总结
1.索引的目的是什么 1.快速访问数据表中的特定信息,提高检索速度 2.创建唯一性索引,保证数据库表中每一行数据的唯一性. 3.加速表和表之间的连接 4.使用分组和排序子句进行数据检索时,可以显著减少 ...
- AVAudioSesion和AVAudioPlayer的基本使用
iOS基础篇-AVPLayer和AVAudioSession 2018.02.27 16:17 字数 215 阅读 1516评论 0喜欢 4 作用 AVPLayer:可以用来播放在线及本地音视频 AV ...
- 软件工程(FZU2015) 赛季得分榜,第10回合(alpha冲刺)
SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...
- semantic-ui 表单
1.定义表单 先看一个基础的表单,再讲解一下: <form class="ui form" method="post" action="&quo ...
- vue-lazyload简单使用
vue-lazyload简单使用 npm地址:https://www.npmjs.com/package/vue-lazyload github地址:https://github.com/hilong ...