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方式 ...
随机推荐
- 简述redis特点及其应用场景
1. Redis八大特点 1.1. 速度快 说到Redis的速度快,大家的第一反应一定是内存读取,那是肯定的,但如果面试的时候仅仅说到这点,那还是远远不够的,至少还有以下三点要补充: Redis是用C ...
- 对比redis的RDB、AOF模式的优缺点
一.RDB模式 1.1 工作原理 RDB(Redis DataBase):基于时间的快照,其默认只保留当前最新的一次快照,特点是执行速度比较快,缺点是可 能会丢失从上次快照到当前时间点之间未做快照的数 ...
- python小白记录一 ——python脚本生成windows可执行exe
1.需要安装pywin32 先查看自己有没有安装:使用如下命令查看 pip show pywin32 如果没有则用下面方式进行安装: pip install pywin32 然后等待安装完成: 2.再 ...
- Solution -「NOI.AC 省选膜你赛」寄蒜几盒
题目 题意简述 给定一个含有 \(n\) 个顶点的凸多边形( \(n\) 是偶数),对于每一对相对的边(即中间有 \(\frac{n}2-1\) 条其它边),延长它们以将平面分割为多块,并把包含原 ...
- c++ Message与Folder 拷贝 析构(没有动态空间的类)
c++ Message与Folder 拷贝 析构(没有动态空间的类) 1.两个类里边分别保存一个对方的set表,当前类有拷贝或者销毁时需要更新另一个类的set表. 2.两个类都需要访问对方的priva ...
- Python基础—名称空间(Day10)
一.名称空间和作用域 1.全局名称空间(名称空间.命名空间): py文件运行时代码从上之下依次执行,看到一个变量就会将这个变量与对应值的内存地址的关系存到名称空间里,代码要运行时(print时)从名称 ...
- [LeetCode]1480. 一维数组的动态和
给你一个数组 nums .数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]-nums[i]) . 请返回 nums 的动态和. 示例 1: 输入:nums = [1, ...
- Centos安装Sublime text
Sublime text官方给出方法如下: 1.终端执行以下命令: 安装 GPG 密匙 sudo rpm -v --import https://download.sublimetext.com/su ...
- python中类似c++静态方法的一个记录
个人学习c++出身,在后面的工作中接触到python,见到一些classmethod的字眼有点疑惑,所以进行一些记录. 都知道的是,c/c++中有着静态成员,静态方法的存在,比如: class A: ...
- 思迈特软件Smartbi:专注BI,把产品打造到极致
在企业服务领域,现在的BI(商业智能)无疑是妥妥的风口.不过在20多年前,BI却完全是一幅门庭冷清宾客稀的光景--小型企业高攀不起,大型企业爱答不理. 一些管理者们理所当然地认为,商业是人脑的高阶竞争 ...