【Spring】使用xml配置AOP

文章目录

  • 1.前言
  • 2.xml配置AOP
  • 3. 总结

1.前言

在之前的学习中,都是使用注解的方式进行AOP的配置.其实使用xml配置文件也可以配置AOP.

2.xml配置AOP

xml配置AOP方法如下:

  1. 添加相关依赖

    <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency>
    </dependencies>    
    
  2. 相关bean放到Spring容器中

    @Service
    public class StudentService {public void insert(){System.out.println("StudentService中的insert方法");}
    }
    
  3. 创建切面类注入到Spring中,我这里使用的是@Component注解,也可以在配置文件中使用Bean标签

    @Component
    public class Aspect {@Pointcut("execution(* com.example.service..*.*(..)")public void pt(){System.out.println("");}public void methodBefore(JoinPoint joinPoint){Object[] args = joinPoint.getArgs();Object target = joinPoint.getTarget();MethodSignature signature = (MethodSignature) joinPoint.getSignature();System.out.println("Before");}
    }
    
  4. 在配置文件中开启组件扫描(因为我在将相应的Bean注入到Spring中时,使用的是注解,如果使用Bean标签,这一步可以省略)

    <context:component-scan base-package="com.example">
    </context:component-scan>
    
  5. 在配置文件中配置AOP,将切面类(StudentService)中的methodBefore方法设置为前置通知

        <aop:config><!--定义切面--><aop:pointcut id="pt" expression="execution(* com.example.service..*.*(..))"/><!--配置切面--><aop:aspect ref="aspect"><!--配置通知类型--><!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --><aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/></aop:aspect></aop:config>
    

    配置通知类型中有两种写法,一种是用pointcut-ref属性,值是定义切面时的id,另一种是使用pointcut属性,需要指定切点方法的全类名

运行结果:
在这里插入图片描述
可以看到成功将StudentService中的methodBefore方法设置为前置通知了

接下来讲一下复杂的通知如何配置,如下:

@AfterReturning(value = "point()",returning = "ret")
public void methodAfterReturning(JoinPoint joinPoint, Object ret){// 方法体
}
@AfterThrowing(value = "point()",throwing = "e")
public void methodAfterThrowing(JoinPoint joinPoint,Throwable e){// 方法体
}

@AfterReturning和@AfterThrowing是有两个参数的

以@AfterReturning为例,在切面类中添加对应的普通方法:

@Component
public class Aspect {@Pointcut("execution(* com.example.service..*.*(..))")public void pt(){System.out.println("");}public void methodBefore(JoinPoint joinPoint){Object[] args = joinPoint.getArgs();Object target = joinPoint.getTarget();MethodSignature signature = (MethodSignature) joinPoint.getSignature();System.out.println("Before");}    public void methodAfterReturning(JoinPoint joinPoint, Object ret){System.out.println("AfterReturning: "+ ret);}
}
<aop:aspect ref="aspect"><!--配置通知类型--><!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --><aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/><aop:after-returning method="methodAfterReturning" pointcut-ref="pt" returning="ret"/>
</aop:aspect>

需要注意在设置AOP时,标签中有returning这样一个属性

运行结果:

在这里插入图片描述

3. 总结

xml配置AOP的重要步骤:

  1. 定义切面类,定义切点.
  2. 将目标类和切面类添加到Spring容器中(注解或Bean标签),如果是注解方式,需要添加组件扫描
  3. 在配置文件中配置AOP

在实际开发中,用注解配置AOP比较多,xml配置AOP了解即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin学习(二)

2.kotlin学习&#xff08;二&#xff09; 1.条件控制 package com.simon.secondfun main(args: Array<String>) {//ifvar a 1var b 2var max:Intif (a > b){max a}else{max b}//作为表达式结果赋值给max1 感觉这个简单啊var max1 if(a>b)a else bprintln(ma…

解决Zotero不显示标签的问题

目录 问题描述 解决办法&#xff1a; 问题描述 Zotero是一款学习助手&#xff0c;可以帮助我们梳理文献&#xff0c;方便我们整理。 最近电脑从windows换到mac&#xff0c;重新安装了Zotero&#xff0c;发现之前的一直设置都没有了。比如设置好的标签信息不显示了。如下图: …

pygame播放视频并实现音视频同步

一、前言 在我接触pygame时最新的pygame已经不支持movie模块&#xff0c;这就导致在pygame播放视频变成一个问题&#xff0c;网上搜了下解决方案有两个&#xff1a; 一是使用opencv播放视频&#xff0c;再结合pygame.mixer来播放音频 二是使用moviepy播放视频&#xff0c;再…

wsl安装ubuntu的问题点、处理及连接

WSL安装Ubuntu的参考链接 (41条消息) wsl报错&#xff1a;WslRegisterDistribution failed with error: 0x800701bc_yzpyzp的博客-CSDN博客_0x800701bc wsl (41条消息) 使用Ubuntu安装软件出现Unable to locate package错误解决办法_大灰狼学编程的博客-CSDN博客 手把手教你…

外贸ERP系统是什么?推荐的外贸管理软件?

外贸ERP管理系统有哪些&#xff1f;海洋建站管理软件的功能&#xff1f; 为了更有效地处理外贸业务&#xff0c;许多企业正在寻找先进的工具和技术。为了提高效率、降低成本并增强竞争力&#xff0c;越来越多的外贸企业正在转向外贸ERP系统。那么&#xff0c;外贸ERP系统究竟是…

抽象工厂设计模式是什么?什么是 Abstract Factory 抽象工厂设计模式?Python 抽象工厂设计模式示例代码

什么是 Abstract Factory 抽象工厂设计模式&#xff1f; 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定其具体类。它允许客户端使用抽象的接口创建一组相关对象&#xff0c;而无需关注实际的对象实…

VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、简介 在 VS Code 中&#xff0c;tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题&#xff08;错误、警告等&#xff09;。 problemMatcher有三种配置方式&#xff0c;具体可…

Java操作redis常见类型数据存储

目录 一、Java连接Redis 1.1 导入pom依赖 1.2 建立连接 二、Java使用Redis 2.1 字符串 String 2.2 哈希 Hash 2.3 列表 List 2.4 集合 Set 2.5 有序集合 Sorted Set 三、Redis的实际应用场景 一、Java连接Redis redis与mysq都是数据库&#xff0c;java操作redis其实跟…

vue项目不用重新打包即可以修改项目ip

需求&#xff1a; 由于vue项目每次修改项目ip都需要重新打包&#xff0c;解决痛点&#xff1a; 方法&#xff1a; vue项目的dev.env.js配置文件引入外部变量 node中使用CommonJS规范引入 导出 static文件下新建host文件 static为暴露到外包的静态资源文件夹 /static/host/下…

黑盒子测试

黑盒子测试的步骤包括&#xff1a; 测试计划&#xff1a;根据用户需求报告中关于功能要求和性能指标的规格说明书&#xff0c;定义相应的测试需求报告&#xff0c;制订黑盒测试的最高标准。同时适当选择测试内容&#xff0c;合理安排测试人员、测试时间及测试资源等。测试设计…

2023年【施工升降机司机(建筑特殊工种)】最新解析及施工升降机司机(建筑特殊工种)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 施工升降机司机(建筑特殊工种)最新解析参考答案及施工升降机司机(建筑特殊工种)考试试题解析是安全生产模拟考试一点通题库老师及施工升降机司机(建筑特殊工种)操作证已考过的学员汇总&#xff0c;相对有效帮助施工升…

星戈瑞Sulfo-Cyanine5 mal的优势和局限性

Sulfo-Cyanine5 Maleimide&#xff08;Sulfo-Cy5-Mal&#xff09;是一种荧光染料&#xff0c;在分子生物学和细胞生物学研究中应用。 优势&#xff1a; 1.强荧光信号&#xff1a;Sulfo-Cy5-Mal具有强烈的荧光信号&#xff0c;适用于高灵敏度的荧光成像和检测。其荧光波长适用…

【开题报告】基于微信小程序的时空胶囊系统的设计与实现

1.研究背景 随着人们生活水平的提高和物质条件的改善&#xff0c;人们对于生活的品质和价值的要求也不断提高。人们开始更加注重记录自己的生活经历和感受&#xff0c;并且希望这些记录可以长期保存&#xff0c;并且可以随时回忆和分享。时空胶囊系统就是一个能够满足人们这种…

SAP 快速Debug财务替代GGB1

本文目的是提供快速debug财务替代的步骤。 1.GGB1打开财务替代界面 2.找到需要调试的替代&#xff0c;并在tcode输入框中输入SHCB,回车后将显示系统自动生成的源码界面。 3.找到需要调试的步骤&#xff0c;设置断点&#xff0c;后续进行重现操作即可进入断点位置。 以上。

风电场数字孪生-升压站BIM三维模型-obj格式

简介&#xff1a; 风电场中的升压站三维模型&#xff0c;obj格式&#xff0c;采用BIM技术建模&#xff0c;可应用于风电场三维数字孪生领域&#xff0c;用于对升压站进行漫游浏览&#xff1b;三维可视化场景应用&#xff1b;风电场三维设计模型。 下载地址 风电场数字孪生-升…

PostgreSQL中所的锁

为了确保复杂的事务可以安全地同时运行&#xff0c;PostgreSQL提供了各种级别的锁来控制对各种数据对象的并发访问&#xff0c;使得对数据库关键部分的更改序列化。事务并发运行&#xff0c;直到它们尝试获取互相冲突的锁为止(比如两个事务更新同一行时)。当多个事务同时在数据…

java springboot在测试类中构建虚拟MVC环境并发送请求

好 上文java springboot在测试类中启动一个web环境我们在测试类中搭了一个web环境 那么 下面就要想办法弄一个接口的测试 这边 我们还是要在controller包下去创建一个 controller类 写一个访问接口 这里 我创建一个 TestWeb.java 这里 我们编写代码如下 package com.example.…

7.0 异常处理

1. 异常概述 1.1. 异常的概念 Java中的异常是指Java程序在运行时可能出现的错误或非正常情况&#xff0c;比如在程序中试图打开一个根本不存在的文件&#xff0c;在程序中除0等。异常是否出现&#xff0c;通常取决于程序的输入、程序中对象的当前状态以及程序所处的运行环境。…

Week-T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强&#xff08;增加数据集中样本的多样性&#xff09;三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…

查看文件的二进制数据

有时候会遇到想查看一些文件的二进制的数据的需求&#xff0c;比如想看一张图片的二进制数据&#xff0c;想查看bin文件的二进制数据&#xff0c;或者想查看其它文件的二进制数据等等。 在linux和mac下有命令直接支持&#xff0c;比较方便&#xff0c;但是很多人用的是windows…