Spring AOP 框架
引言
要掌握 Spring AOP 框架,需要弄明白 AOP 的概念。
AOP 概念
AOP(Aspect Oriented Programming的缩写,翻译为面向方面或面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用 AOP 可以对业务逻辑的各个部分隔离,从而使的业务逻辑各部分的耦合性降低,提高程序的可重用性,踢开开发效率,使用 AOP 技术可以实现的主要功能有日志记录,性能统计,安全控制,事务处理,异常处理等。
AOP 技术的底层实现原理是 JDK 动态代理和 CGLIB 动态代理。这两种动态代理的区别是 JDK 动态代理必须实现接口,而 CGLIB 直接操纵字节码,可以做到不使用接口的情况下实现动态代理。
AOP 与 OOP 区别
OOP面向对象编程,针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而 AOP 则是针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或阶段,以获得逻辑过程的中各部分之间低耦合的隔离效果。这两种设计思想在目标上有着本质的差异。
AOP 术语
连接点(Joinpoint)
AOP 插入代码的特定位置(方法调用前、方法调用后、方法调用前后、抛出异常)切点(Pointcut)
AOP 定位或查找连接点的方式(一个切点可以匹配多个连接点)增强(Advice)
AOP 插入到连接点的一段程序代码(前置增强、后置增强、环绕增强和抛出异常增加)引介(Introduction)
特殊的增强(可以为类添加一些属性和方法)织入(Weaving)
插入代码的过程(AOP 有三种织入方式:编译器织入、类装载期织入、动态代理织入)切面(Aspect)
由切点和增强或引介组成(Spring AOP 是负责实施切面的框架)
Spring AOP 框架
Spring AOP 是使用纯 Java 实现 AOP,它不需要专门的编译过程,也不需要特殊的类装载器,它在运行期通过代理的方式向目标类织入增强代码。Spring AOP 使用了两种代理机制:JDK 动态代理和CGLib 动态代理,它们是 Spring AOP 底层技术。
Spring AOP 支持两种使用方式:
基于 XML 配置文件
基于注解
注解
<!– 开启 AOP 注解开关 -->
<aop:aspectj-autoproxy />
@Aspect 注解:放置于切面类上,用于注解定义一个切面
@Before 注解:放置于切面类方法上,用于注解实现前置增强
@After 注解:放置于切面类方法上,用于注解实现后置增强
@Around 注解:放置于切面类方法上,用于注解实现环绕增强
@AfterThrowing 注解:放置于切面类方法上,用于注解实现抛出异常增强
切点表达式
**切点表达式 = execution(返回值类型 + 包名 + 类名 + 方法名 + 参数个数) **
切点表达式支持三个通配符:
符号(*) :代表任意字符,匹配上下文中的一个元素
符号(..):代表任意字符,可以代表多个元素,但是在表示类的时候不能单独使用,必须和 * 配合;在代表形参的时候可以单独使用
符号(+):代表按类型匹配指定类的所有类(包括子类),只能跟在类名的后面
举例:
execution(* com.dt..Dog.b(..))
该切点表达式表示匹配 1)方法的任意类型返回值,2)方法必须是 com.dt 所在包 3)类名必须为Dog 4)方法名必须以字母 b 开头 5)方法参数个数不限
总结
AOP 可以通过预编译方式和运行期动态代理实现在不修改源码的情况下,给程序动态统一添加功能的一项技术。
Spring AOP 框架的更多相关文章
- Spring AOP框架 AspectJ
1 AspectJ简介 v AspectJ是一个基于Java语言的AOP框架 v Spring2.0以后新增了对AspectJ切点表达式支持 v @AspectJ 是AspectJ1.5新增功能 ...
- Spring/AOP框架, 以及使用注解
1, 使用代理增加日志, 也是基于最原始的办法 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; ...
- Spring aop框架使用的jar包
除了前两个jar包,后面的jar包spring框架包中都有,前两个jar包的下载地址:https://pan.baidu.com/s/1L-GLGT1c8vnwFwqLxzzZuw
- Spring aop的实现原理
简介 前段时间写的java设计模式--代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理. 说起AOP就不得不说下OOP了,OO ...
- Spring AOP 实现原理与 CGLIB 应用
https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/ AOP(Aspect Orient Programming),也就是面向 ...
- Spring AOP: Spring之面向方面编程
Spring AOP: Spring之面向方面编程 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解 ...
- Spring AOP 实现原理与 CGLIB 应用--转
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- Spring学习(十八)----- Spring AOP+AspectJ注解实例
我们将向你展示如何将AspectJ注解集成到Spring AOP框架.在这个Spring AOP+ AspectJ 示例中,让您轻松实现拦截方法. 常见AspectJ的注解: @Before – 方法 ...
随机推荐
- ubuntu16.04 下同时打开多个终端窗口
reference :https://forums.solydxk.com/viewtopic.php?t=5139 reference : http://blog.51cto.com/huqilon ...
- JavaWeb 补充(XML)
XML 1. 概念:Extensible Markup Language 可扩展标记语言 可扩展:标签都是自定义的. <user> <student> 功能: 存储数据 ...
- 100天搞定机器学习:PyYAML基础教程
编程中免不了要写配置文件,今天我们继续Python网络编程,学习一个比 JSON 更简洁和强大的语言----YAML .本文老胡简单介绍 YAML 的语法和用法,以及 YAML 在机器学习项目中的应用 ...
- JFX11+Maven+IDEA 发布跨平台应用的完美解决方案
1 概述 前几天写了两篇关于JFX+IDEA打包跨平台应用的文章,这篇是使用IDEA自带功能打包的,这篇是使用Maven进行打包的,但是效果不太满意,因为从JDK9开始实现模块化,同时JFX部分从JD ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流
在一般的互联网应用中限流是一个比较常见的场景,也有很多常见的方式可以实现对应用的限流比如通过令牌桶通过滑动窗口等等方式都可以实现,也可以在整个请求流程中进行限流比如客户端限流就是在客户端通过随机数直接 ...
- 百度API定位根据经度、维度 返回当前详细地址
百度地图API是一套为开发者免费提供的基于 百度地图的应用程序接口,包括JavaScript.iOS.Andriod.静态地图.Web服务等多种版本,提供基本地图.位置搜索.周边搜索等. 1 < ...
- Spring Boot的自动配置原理及启动流程源码分析
概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...
- 记一次“愉快”的lnmp环境的搭建
愉快的lnmp环境搭建 后续更新 几个笔记记录 yum remove php-mysql yum -y install cmake autoconf wget gcc-c++ gcc zlib pcr ...
- 【swagger】 swagger-ui的升级版swagger-bootstrap-ui
swagger-bootstrap-ui是基于swagger-ui做了一些优化拓展: swagger-ui的界面: swagger-bootstrap-ui界面: 相比于原生的swagger-ui , ...
- 异步访问技术Ajax(XMLHttpRequest)
目录 AJAX XMLHttpRequest Ajax向服务器发送请求 Ajax接收服务器响应 AJAX - onreadystatechange 事件 使用 Callback 函数 一次Ajax请求 ...