【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,一经查实,立即删除!

相关文章

解决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其实跟…

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

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

【Java 进阶篇】JavaScript JSON 语法入门:轻松理解数据的序列化和反序列化

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于 JavaScript 中 JSON&#xff08;JavaScript Object Notation&#xff09;语法的入门指南。JSON 是一种轻量级的数据交换格式&#xff0c;广泛应用于前端开发中。通过这篇博客&#xff0c;我将带你深入了解 JSON 的语法…

[userfaultfd] 2019-BalsnCTF_KrazyNote

前言 题目不算难, 但是这代码逆向可逆死个人:) 悲悲悲 程序分析 内核版本: v5.1.9 保护: 开了 kaslr, smep, smap. 现在的题目基本都开了, 都不用看. 其中 note 模块中注册了一个 misc 设备, 其函数表中就只有 note_open 和 note_unlocked_ioctl 两个函数, 其中 note_open…

C#入门(13):特性Attribute

C# 特性&#xff08;Attributes&#xff09;是用于在运行时为程序元素&#xff08;如类、方法、属性等&#xff09;添加声明性信息的一种方式。这些信息可以在程序运行时通过反射&#xff08;Reflection&#xff09;访问。特性可以用来控制程序行为、添加元数据或者影响程序的运…

SpringBoot趣探究--1.logo是如何打印出来的

一.前言 从本篇开始&#xff0c;我将对springboot框架做一个有趣的探究&#xff0c;探究一下它的流程&#xff0c;虽然源码看不懂&#xff0c;不过我们可以一点一点慢慢深挖&#xff0c;好了&#xff0c;下面我们来看一下本篇的知识&#xff0c;这个logo是如何打印出来的&#…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大特点分析

数字化时代银行网点厅堂营销存在以下5大特点&#xff1a; 1、产品多样化&#xff1a;在数字化时代&#xff0c;银行的产品和服务变得更加多样化。除了传统的存款、贷款、理财等金融服务外&#xff0c;还新增了各种创新产品&#xff0c;如网上银行、移动支付、投资咨询、保险、…