首页/新闻资讯/正文详情

Spring AOP—基于XML的AOP实现(IDEA2026+JDK17)

发布时间:2026/9/25 17:57:25 来源:云帆数科 栏目:资讯中心
Spring AOP—基于XML的AOP实现(IDEA2026+JDK17)
0.环境IDEA2026.1JDK17spring: 5.3.201.创建项目打开IDEA点击文件—新建—项目然后下面选择”Java“名称为SpringAOPXml构建系统选MavenJDK版本选17。最后点击”创建“。创建完后项目基本结构如下然后我们给项目创建项目结构。右击main下面的java文件夹然后选择”新建“再点击”软件包“软件包命参考如下com.guo.aop可以根据实际情况修改包名。创建完后项目结构如下如果你是下面这种结构想展开的话那么继续往下看。在项目上面有三个点点击然后选择”外观“保证”压缩空的中间软件包“前面没有对号。2.引入依赖打开pom.xml文件引入下面的依赖文件把dependencies全部内容放进去?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.demo/groupIdartifactIdSpringAOPXml/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- spring-core的依赖包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion5.3.20/version/dependency!-- spring-beans的依赖包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.3.20/version/dependency!-- spring-context的依赖包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.20/version/dependency!-- spring-expression的依赖包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-expression/artifactIdversion5.3.20/version/dependency!-- commons-logging的依赖包 --dependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.2/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion5.3.20/version/dependency!-- aspectjrt包的依赖 --dependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactIdversion1.9.7/version/dependency!-- aspectjweaver包的依赖 --dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.7/version/dependency/dependencies/project一开始引入报错是正常的因为还没有下载下依赖我们有两种方式。方式1直接点击右上角的刷新。方法2先点击右侧的maven插件再点击上面的两个刷新。注意你先要配置正确maven环境这里才能正常下载下来的依赖。3.创建Dao文件xxxDao是接口文件也可以使用包来包裹这个文件右击aop文件夹选择”新建“然后选择”Java类“。这个地方的类型要选接口接口名为UserDao添加代码packagecom.guo.aop;publicinterfaceUserDao{publicvoidinsert();publicvoiddelete();publicvoidupdate();publicvoidselect();}添加完后项目如下4.创建Impl文件xxxImpl文件是xxxDao具体实现类这里面要写具体的业务代码。右击aop文件夹选择”新建“再选择“Java类”这里的选择的类型是:类类名为UserDaoImpl参考代码packagecom.guo.aop;publicclassUserDaoImplimplementsUserDao{publicvoidinsert(){System.out.println(添加用户信息);}publicvoiddelete(){System.out.println(删除用户信息);}publicvoidupdate(){System.out.println(更新用户信息);}publicvoidselect(){System.out.println(查询用户信息);}}注意这里使用implements 实现了UserDao的接口实现后的项目如下5.创建切面类这个就是需要切进去的代码。右击aop文件夹选择“新建”然后点击“Java类”切面类名为XmlAdvice参考代码packagecom.guo.aop;importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.ProceedingJoinPoint;publicclassXmlAdvice{//前置通知publicvoidbefore(JoinPointjoinPoint){System.out.print(这是前置通知!);System.out.print(目标类是joinPoint.getTarget());System.out.println(被织入增强处理的目标方法为joinPoint.getSignature().getName());}//返回通知publicvoidafterReturning(JoinPointjoinPoint){System.out.print(这是返回通知方法不出现异常时调用!);System.out.println(被织入增强处理的目标方法为joinPoint.getSignature().getName());}/** * 环绕通知 * ProceedingJoinPoint 是JoinPoint子接口表示可以执行目标方法 * 1.必须是Object类型的返回值 * 2.必须接收一个参数类型为ProceedingJoinPoint * 3.必须throws Throwable */publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{System.out.println(这是环绕通知之前的部分);//调用目标方法Objectobjectpoint.proceed();System.out.println(这是环绕通知之后的部分);returnobject;}//异常通知publicvoidafterException(){System.out.println(异常通知);}//后置通知publicvoidafter(){System.out.println(这是后置通知);}}创建后项目内容如下6.创建配置文件右击resourtces文件夹选择“新建”然后点击“文件”。文件名为applicationContext.xml?xml version1.0 encodingUTF-8?beansxmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd!-- 注册Bean --beannameuserDaoclasscom.guo.aop.UserDaoImpl/beannamexmlAdviceclasscom.guo.aop.XmlAdvice/!-- 配置Spring AOP--aop:config!-- 指定切点 --aop:pointcutidpointcutexpressionexecution(* com.guo.aop.UserDaoImpl.*(..))/!-- 指定切面 --aop:aspectrefxmlAdvice!-- 指定前置通知 --aop:beforemethodbeforepointcut-refpointcut/!-- 指定返回通知 --aop:after-returningmethodafterReturningpointcut-refpointcut/!-- 指定环绕方式 --aop:aroundmethodaroundpointcut-refpointcut/!-- 指定异常通知 --aop:after-throwingmethodafterExceptionpointcut-refpointcut/!-- 指定后置通知 --aop:aftermethodafterpointcut-refpointcut//aop:aspect/aop:config/beans创建后项目如下7.编写测试代码测试代码可以放到测试类中这里为了方便暂时放到main函数中我们创建main函数。右击aop点击“新建”在点击“Java类”类名为XmlTest参考代码packagecom.guo.aop;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassXmlTest{publicstaticvoidmain(String[]args){ApplicationContextcontextnewClassPathXmlApplicationContext(applicationContext.xml);UserDaouserDaocontext.getBean(userDao,UserDao.class);userDao.delete();System.out.println();userDao.insert();System.out.println();userDao.select();System.out.println();userDao.update();}}8.测试运行后可以看到切面类代码正常切入正常执行。本文源代码下载1.百度网盘通过网盘分享的文件SpringAOPXml.zip链接: https://pan.baidu.com/s/1Zkukv6eWID8RZtxsLS3BQg?pwdiiej 提取码: iiej2.夸克网盘我用夸克网盘给你分享了「SpringAOPXml.zip」点击链接或复制整段内容打开「夸克APP」即可获取。/0edc3b4gHe链接https://pan.quark.cn/s/daffd91621ea?pwdHX7y提取码HX7y

相关推荐

浏览 npm 包快 10 倍:npmx.dev 键盘快捷键与命令面板完全秘籍
浏览 npm 包快 10 倍:npmx.dev 键盘快捷键与命令面板完全秘籍

浏览 npm 包快 10 倍:npmx.dev 键盘快捷键与命令面板完全秘籍 【免费下载链接】npmx.dev a fast, modern browser for the npm registry 项目地址: https://gitcode.com/gh_mirrors/np/npmx.dev npmx.dev 是一个极速、现代化的 npm 包浏览器,而它… · 2026/9/25 17:57:19

RuView实战:用WiFi CSI实现隔墙人体动作感知全解析
RuView实战:用WiFi CSI实现隔墙人体动作感知全解析

这几年做智能家居和室内感知方案,我接触过摄像头、毫米波雷达、红外阵列,各有各的麻烦。摄像头怕隐私争议,红外只能感知运动,毫米波效果最好但一套下来价格不低。去年在开源社区翻到RuView这个项目,才意识到手边最普通… · 2026/9/25 17:57:12

Xberg 接入 SurrealDB:surrealdb-xberg 文档入库、去重与混合检索实战指南
Xberg 接入 SurrealDB:surrealdb-xberg 文档入库、去重与混合检索实战指南

后端AI 应用NLP 【免费下载链接】xberg Polyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with … · 2026/9/25 17:57:06

【信息科学与工程学】【通信工程】第二百四十篇 IPv4/IPv6 功能点、特性和算法及 IPv4→IPv6 迁移特性03
【信息科学与工程学】【通信工程】第二百四十篇 IPv4/IPv6 功能点、特性和算法及 IPv4→IPv6 迁移特性03

编号 分类 功能/特性 支撑结构/层级 现象 数学分析与参数设计 特征分析 1353 广电FTTH/组播 IPv4 MSDP 组播源发现 vs IPv6 嵌入式RP (Embedded RP) vs 双栈源发现 省干ASBR、RP、BGP、Anycast RP 跨域组播源发现:IPv4用MSDP在RP间交换SA,IPv6用嵌入式RP将RP地址编… · 2026/9/25 18:24:45

fetchEventSource与fetch流式请求实战:AbortSignal复用引发的failed to fetch排查
fetchEventSource与fetch流式请求实战:AbortSignal复用引发的failed to fetch排查

1. 先交代背景:我是怎么踩进这个坑的最近在做一个 AI 对话前端改造,需要把大模型回答从“等半天一次性吐出来”改成“边生成边渲染”的流式效果。需求本身不复杂,但落地时却让我在fetchEventSource和原生fetch之间反复横跳,折腾了… · 2026/9/25 18:24:39

eWebEditor v8.0 老版富文本编辑器部署配置与二次开发实战
eWebEditor v8.0 老版富文本编辑器部署配置与二次开发实战

简介:eWebEditor v8.0 是一套基于浏览器的所见即所得在线网页编辑器完整程序包,面向网站开发者、内容管理系统集成人员以及需要在线内容编辑功能的技术运维者。资源共606个文件,压缩包约4.29MB,包含ASP动态脚本、JavaScript交互逻… · 2026/9/25 18:24:39

企业级Agent平台落地:从超级个体到超级团队的工程实践
企业级Agent平台落地:从超级个体到超级团队的工程实践

1. 从单兵作战到团队协同:企业级 Agent 平台要解决的真问题过去一年,我接触过不少团队在内部推 AI 编程助手,几乎都走过同一条曲线:前两周大家兴致勃勃,每个人都在自己的编辑器里装插件、配模型、写提示词,… · 2026/9/25 18:24:02

机器人防撞和防跌落,TOF安装方式能照搬吗?
机器人防撞和防跌落,TOF安装方式能照搬吗?

有客户提了一个需求:产品用在户外,需要做"边缘检测"——机器人走到平台边缘或台阶前要能停下来。他问TOF传感器能不能做这个。这个问题看起来跟"前方避障"差不多——都是测距、都是判断有没有东西。但"防跌落(边缘检… · 2026/9/25 18:23:56

OpenMontage:本地部署的AI剪辑Agent实战指南
OpenMontage:本地部署的AI剪辑Agent实战指南

1. 这不是“AI剪视频”,而是让AI真正当导演:OpenMontage实测前必须厘清的三件事你搜“AI Agent 能不能独立做完一条视频”,刷出来的答案大概率是两种:一种说“能,一键生成,秒出片”,另一种说“不… · 2026/9/25 18:23:56

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码