Spring AOP Xml配置过程及解释
Spring AOP(基于xml)
目前主流的AOP框架有两个,分别是Spring AOP和AspectJ。新版本的Spring框架建议使用AspectJ来开发AOP。
专业术语:
Aspect(切面):在实际应用中,切面通常是指封装用于横向插入系统功能的类,该类要被Spring容器识别为切面,需要在配置文件中通过<bean>元素指定。
JoinPoint(连接点):在程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出。在SpringAOP中,连接点就是指方法的调用。
PointCut(切入点):是指切面与程序流程的交叉点,即那些需要处理的连接点。通常在程序中,切入点指的是类或者方法名,如某个通知要应用到所有以add开头的方法中,那么所有满足这个规则的方法都是切入点。
Advice(通知增强处理):AOP框架在特定的切入点执行增强处理,即在定义好的切入点初所要执行的代码。可以理解为切面类中的方法,他是切面类的具体实现。
Target Object(目标对象):是指所有被通知的对象,也称为被增强对象。如果AOP框架采用的是动态AOP实现,那么该对象就是一个被代理的对象。
Proxy(代理):将通知应用到目标对象上,被动态创建的对象。
Weaving(织入):将切面代码插入目标对象上,从而生成代理对象的过程。
基于xml的声明式AspectJ
所有的切面、切入点和通知都必须定义在<aop:config>元素内。Spring配置文件中的<beans>元素下可以包含多个<aop:config>元素,一个<aop:config>元素中又可以包含属性和子元素,其子元素包括<aop:pointcut>、<aop:advisor>、<aop:aspect>。在配置时,这三个子元素必须按照此顺序来定义。在<aop:aspect>元素下,同样包含属性和多个子元素,通常使用<aop:aspect>元素及其子元素就可以在XML文件中配置切面、切入点和通知。
- 配置切面:在Spring的配置文件中,配置切面使用的是<aop:aspect>元素,该元素会将一个一定一号的Spring Bean转换为切面Bean,所以在配置文件中要先定义一个普通的Spring Bean(如上述代码中的myAspect)。定义完成之后,通过<aop:aspect>元素的ref属性即可引用该Bean。
属性名称 | 描述 |
---|---|
id | 用于定义该切面的唯一标识名称 |
ref | 用于引用普通的Spring Bean |
- 配置切入点:在Spring的配置文件中,切入点是通过<aop:pointcut>元素来定义的。当<aop:pointcut>元素作为<aop:config>元素的子元素定义时,表示其为全局切点,可以被多个切面共享;当<aop:pointcut>元素作为<aop:aspect元素的子元素时,表示该切入点只对当前切面有效。>
属性名称 | 描述 |
---|---|
id | 用于定义该切入点的唯一标识名称 |
expression | 用于指定切入点关联的切入点表达式 |
在上述配置代码片段中,execution(* com.ssm.aspectj.*.*(..))就是定义切入点表达式。总的意思是匹配com.ssm.aspect保重任意类的任意方法的执行。其中execution是表达式的主体,第一个*是指返回值类型,第二个*是指类名,第三了*是指方法名,都表示
任意的
。括号里的..表示任意参数。第一个*与包名之间有空格。
具体实践
Spring AOP Xml配置过程及解释的更多相关文章
- spring 5.x 系列第3篇 —— spring AOP (xml配置方式)
文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 附: 关于切面表达 ...
- 基于注解的Spring AOP的配置和使用
摘要: 基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不 ...
- spring+mybaits xml配置解析----转
一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...
- Spring AOP 不同配置方式产生的冲突问题
Spring AOP的原理是 JDK 动态代理和CGLIB字节码增强技术,前者需要被代理类实现相应接口,也只有接口中的方法可以被JDK动态代理技术所处理:后者实际上是生成一个子类,来覆盖被代理类,那么 ...
- spring AOP为什么配置了没有效果?
spring Aop的配置一定要配置在springmvc配置文件中 springMVC.xml 1 <!-- AOP 注解方式 :定义Aspect --> <!-- ...
- spring的xml配置声明以及相应的问题处理
spring的xml配置声明: xml配置声明 Code 问题处理 问题1 xml报错: cvc-elt.1: Cannot find the declaration of element 'bea ...
- spring中用xml配置构造注入的心得
spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...
- 基于XML配置的spring aop增强配置和使用
在我的另一篇文章中(http://www.cnblogs.com/anivia/p/5687346.html),通过一个例子介绍了基于注解配置spring增强的方式,那么这篇文章,只是简单的说明,如何 ...
- Spring 使用AOP——xml配置
目录 AOP介绍 Spring进行2种实现AOP的方式 导入jar包 基于schema-based方式实现AOP 创建前置通知 创建后置通知 修改Spring配置文件 基于schema-based方式 ...
随机推荐
- PyTorch深度学习入门笔记(一)PyTorch环境配置及安装
@ 目录 一.工具安装 1.1 Anaconda 安装 1.2 Pytorch安装 二.编辑器安装 2.1 Pycharm安装 2.2 Jupyter安装 OS: ubuntu 20.04(虚拟机) ...
- latex知识点
sensors期刊下载的laTex模板错误修改 把上面的那个删了,原因是什么那,请看下文...... 如何使用endnote + latex 1.使用word将文献按照word引用顺序导出成一个新的e ...
- Spring中声明式事务处理和编程式事务处理的区别
编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理.管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManag ...
- 再见收费的Navicat!操作所有数据库就靠它了!
作为一名开发者,免不了要和数据库打交道,于是我们就需要一款顺手的数据库管理工具.很长一段时间里,Navicat 都是我的首选,但最近更换了一台新电脑,之前的绿色安装包找不到了. 于是就琢磨着,找一款免 ...
- 08python语法入门--基本数据类型及内置方法
数字类型int与float 定义 类型转换 使用 字符串 定义 类型转换 使用 优先掌握的操作 需要掌握的操作 了解操作 列表 定义 类型转化 使用 优先掌握的操作 需要掌握的操作 了解操作 元组 作 ...
- Solution -「AGC 003D」「AT 2004」Anticube
\(\mathcal{Description}\) Link. 给定 \(n\) 个数 \(a_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数. \(n\le10^5\) ...
- 如何在 Flutter 中集成华为云函数服务
介绍 云函数是一项 Serverless 计算服务,提供 FaaS(Function as a Service)能力,可以帮助开发者大幅简化应用开发与运维相关事务,降低应用功能的实现门槛,快速构建业务 ...
- .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- React函数类组件及其Hooks学习
目录 函数类组件 函数式组件和类式组件的区别: 为什么要使用函数式组件? Hooks概念及常用的Hooks 1. useState: State的Hook 语法 useState()说明: setXx ...
- 匿名函数 =匿名方法+ lambda 表达式
匿名函数的定义和用途 匿名函数是一个"内联"语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托[无需取名字的委托],或传递命名委托(而不是命名委托类型 ...