0.环境
IDEA2026.1
JDK17
spring: 5.3.20
1.创建项目
打开IDEA,点击文件—>新建—>项目
然后,下面选择”Java“,名称为:SpringAOPXml,构建系统选:Maven,JDK版本选17。
最后点击”创建“。
创建完后,项目基本结构如下:
然后,我们给项目创建项目结构。
右击main下面的java文件夹,然后选择”新建“,再点击”软件包“
软件包命参考如下:com.guo.aop,可以根据实际情况修改包名。
创建完后,项目结构如下:
如果你是下面这种结构,想展开的话,那么继续往下看。 在项目上面,有三个点,点击,然后,选择”外观“,保证”压缩空的中间软件包“前面没有对号。
2.引入依赖
打开pom.xml文件,引入下面的依赖文件(把dependencies全部内容放进去)
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.demogroupId><artifactId>SpringAOPXmlartifactId><version>1.0-SNAPSHOTversion><properties><maven.compiler.source>17maven.compiler.source><maven.compiler.target>17maven.compiler.target><project.build.sourceEncoding>UTF-8project.build.sourceEncoding>properties><dependencies><dependency><groupId>org.springframeworkgroupId><artifactId>spring-coreartifactId><version>5.3.20version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-beansartifactId><version>5.3.20version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-contextartifactId><version>5.3.20version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-expressionartifactId><version>5.3.20version>dependency><dependency><groupId>commons-logginggroupId><artifactId>commons-loggingartifactId><version>1.2version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-aopartifactId><version>5.3.20version>dependency><dependency><groupId>org.aspectjgroupId><artifactId>aspectjrtartifactId><version>1.9.7version>dependency><dependency><groupId>org.aspectjgroupId><artifactId>aspectjweaverartifactId><version>1.9.7version>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("这是环绕通知之前的部分!");//调用目标方法Objectobject=point.proceed();System.out.println("这是环绕通知之后的部分!");returnobject;}//异常通知publicvoidafterException(){System.out.println("异常通知!");}//后置通知publicvoidafter(){System.out.println("这是后置通知!");}}创建后,项目内容如下:
6.创建配置文件
右击resourtces文件夹,选择“新建”,然后,点击“文件”。 文件名为:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://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"><beanname="userDao"class="com.guo.aop.UserDaoImpl"/><beanname="xmlAdvice"class="com.guo.aop.XmlAdvice"/><aop:config><aop:pointcutid="pointcut"expression="execution(* com.guo.aop.UserDaoImpl.*(..))"/><aop:aspectref="xmlAdvice"><aop:beforemethod="before"pointcut-ref="pointcut"/><aop:after-returningmethod="afterReturning"pointcut-ref="pointcut"/><aop:aroundmethod="around"pointcut-ref="pointcut"/><aop:after-throwingmethod="afterException"pointcut-ref="pointcut"/><aop:aftermethod="after"pointcut-ref="pointcut"/>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){ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");UserDaouserDao=context.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?pwd=iiej 提取码: iiej
2.夸克网盘
我用夸克网盘给你分享了「SpringAOPXml.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/0edc3b4gHe😕
链接:https://pan.quark.cn/s/daffd91621ea?pwd=HX7y
提取码:HX7y