基于XML的方式配置AOP
第一步:把通知类用 bean 标签配置起来
<bean id="txManager" class="com.atguigu.account.utils.TransactionManager">
<!-- 注入ConnectionUtils -->
<property name="connectionUtils" ref="connectionUtils" />
</bean>
第二步:使用 aop:config 声明 aop 配置
aop:config:
作用:用于声明开始 aop 的配置
<aop:config>
</aop:config>
第三步:在使用 aop:config标签里面配置 aop:aspect切面
aop:aspect:
作用: 用于配置切面。 属性:
id:给切面提供一个唯一标识。
ref:引用配置好的通知类 bean 的 id。
<aop:aspect id="txAdvice" ref="txManager">
<!--配置通知的类型要写在此处-->
</aop:aspect>
第四步:使用 aop:pointcut 配置切入点表达式
aop:pointcut:
作用: 用于配置切入点表达式。就是指定对哪些类的哪些方法进行增强。
属性: expression:用于定义切入点表达式。
id:用于给切入点表达式提供一个唯一标识
<!--配置通用切入点表达式,需要将该标签放置在通知之前-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
第五步:使用 aop:xxx 配置对应的通知类型
<aop:config>
<!--配置通用切入点表达式-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
<aop:aspect id="txAdvice" ref="txManager">
<!--配置前置通知:开启事务-->
<aop:before method="beginTransaction" pointcut-ref="pt1" />
<!--配置后置通知:提交事务-->
<aop:after-returning method="commit" pointcut-ref="pt1" />
<!--配置异常通知:回滚事务-->
<aop:after-throwing method="rollback" pointcut-ref="pt1" />
<!--配置最终通知:释放连接-->
<aop:after method="release" pointcut-ref="pt1" />
</aop:aspect>
</aop:config>
六、详细解析
aop:before
作用: 用于配置前置通知。指定增强的方法在切入点方法之前执行
属性:
method:用于指定通知类中的增强方法名称
ponitcut-ref:用于指定切入点的表达式的引用
poinitcut:用于指定切入点表达式
执行时间点:切入点方法执行之前执行
<aop:before method="beginTransaction" pointcut-ref="pt1"/>
aop:after-returning
作用: 用于配置后置通知 属性:
method:指定通知中方法的名称。
pointct:定义切入点表达式
pointcut-ref:指定切入点表达式的引用
执行时间点: 切入点方法正常执行之后。它和异常通知只能有一个执行
<aop:after-returning method="commit" pointcut-ref="pt1"/>
aop:after-throwing
作用: 用于配置异常通知 属性:
method:指定通知中方法的名称。
pointct:定义切入点表达式
pointcut-ref:指定切入点表达式的引用
执行时间点: 切入点方法执行产生异常后执行。它和后置通知只能执行一个
<aop:after-throwing method="rollback" pointcut-ref="pt1"/>
aop:after
作用: 用于配置最终通知 属性:
method:指定通知中方法的名称。
pointct:定义切入点表达式
pointcut-ref:指定切入点表达式的引用
执行时间点: 无论切入点方法执行时是否有异常,它都会在其后面执行。
<aop:after method="release" pointcut-ref="pt1"/>
aop:around:
作用: 用于配置环绕通知
属性:
method:指定通知中方法的名称。
pointct:定义切入点表达式
pointcut-ref:指定切入点表达式的引用
说明: 它是 spring 框架为我们提供的一种可以在代码中手动控制增强代码什么时候执行的方式。
注意: 通常情况下,环绕通知都是独立使用的
七、环绕通知
/**
* 环绕通知 * @param pjp
* spring 框架为我们提供了一个接口:ProceedingJoinPoint,它可以作为环绕通知的方法参数。
* 在环绕通知执行时,spring 框架会为我们提供该接口的实现类对象,我们直接使用就行。
* @return
*/
public Object transactionAround(ProceedingJoinPoint pjp) {
//定义返回值
Object rtValue = null;
try {
//获取方法执行所需的参数
Object[] args = pjp.getArgs();
//前置通知:开启事务
beginTransaction();
//执行方法
rtValue = pjp.proceed(args);
//后置通知:提交事务
commit();
}catch(Throwable e) {
//异常通知:回滚事务
rollback();
e.printStackTrace();
}finally {
//最终通知:释放资源
release();
}
return rtValue;
}
基于XML的方式配置AOP的更多相关文章
- Spring_基于配置文件的方式配置AOP
applicationContext-xml.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...
- 基于配置文件的方式配置AOP
之前说的都是通过注释的方式配置,接下来说说如何使用配置文件配置AOP 还是原来的代码,去掉所有注释,接下来配置最基本的几个bean. 然后使用<aop:config>标签进行配置,然后配切 ...
- xml的方式配置AOP:Aspect Oriented Programming
在某些类中, 什么时机, 做什么事情 切入点(point-cut): 在某些类中(Class<?>[] itfc = new Class<?>[] { IStudentServ ...
- 22Spring基于配置文件的方式配置AOP
直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalculator { int add(in ...
- spring-AOP框架(基于配置文件的方式配置AOP)
.xml: ref-指向,order-指定优先级
- 转-springAOP基于XML配置文件方式
springAOP基于XML配置文件方式 时间 2014-03-28 20:11:12 CSDN博客 原文 http://blog.csdn.net/yantingmei/article/deta ...
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
- 01Spring基于xml的IOC配置--入门
01Spring基于xml的IOC配置 1.创建一个普通的maven工程 1.1 选择maven,不用骨架,点击下一步. 1.2 填写GroupId.ArtifactId.Version.填完点击下一 ...
- Spring中AOP的基于xml开发和配置
pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- 面向切面编程AOP:基于XML文件的配置
除了使用AspectJ注解声明切面,Spring也支持在bean的配置文件中声明切面,这种声明是通过aop scheme中的XML元素完成的. 首先建立一个类: package com.sevenhu ...
随机推荐
- SSL和HTTPS
转载: 链接 随着互联网的发展,给我们的生活带来便利的同时,也伴随着很多网络钓鱼.信息泄露.网络诈骗等事件的频繁发生,企业网站被钓鱼网站仿冒,遭受经济损失,影响品牌形象. 如果网站不使用SSL证书,数 ...
- 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)
九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) @ 目录 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) 1. RDB 概述 ...
- 玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!
本文分享自天翼云开发者社区<玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!>,作者:天翼云社区官方账号 Super Idol的笑容虽然非常甜 无数粉丝宝宝的心里却 ...
- 初探ASP.NET Core 3.x (2) - ASP.NET Core与ASP.NET前世今生
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/12210662.html 注意 本节是历史课,且绝大多数内容来自于百科或者其他的什么资料来源,如果不感兴趣 ...
- 删除binlog日志
手动删除 在备库检查正在使用的binlog SHOW REPLICA STATUS 在主库获取binlog列表 SHOW BINARY LOGS 删除备库使用前或主库正在写入前的binlog 不要将正 ...
- 运行中的Docker容器获取 .NET项目的Dump文件
进入容器的 shell docker exec -it 容器名称或 id /bin/bash 使用cd命令进入NETSDK所在文件夹 cd /usr/share/dotnet/shared/Micro ...
- 开源一款串口舵机驱动扩展板-FreakStudio多米诺系列
原文链接: FreakStudio的博客 摘要 总线舵机扩展板通过UART接口控制多个舵机,支持堆叠级联,最多连接4个扩展板.具备小尺寸设计.供电保护.全双工转半双工通信.稳定供电等特点,适用于多舵机 ...
- Zookeeper - 本地模式部署
本地模式部署 zoo.cfg 参数解析 本地模式部署 1.上传zookeeper的安装包并解压 tar -zxvf zookeeper-x.x.x.tar.gz -c /xxx/xxx/ 2.将 zo ...
- C语言线程池的常见实现方式详解
在 C 语言中,线程池通常通过 pthread 库来实现.以下是一个详细的说明,介绍了 C 语言线程池的常见实现方式,包括核心概念.实现步骤和具体的代码示例. 点击查看代码 1. 线程池的基本结构 线 ...
- 学习理论:单阶段代理损失的(H, R) - 一致界证明
1 导引 我们在上一篇博客<学习理论:预测器-拒绝器多分类弃权学习>中介绍了弃权学习的基本概念和方法,其中包括了下列针对多分类问题的单阶段预测器-拒绝器弃权损失\(L_{\text{abs ...