Spring AOP基于xml的方式实现

  • 创建目标类
    首先,创建一个简单的服务类,该类包含一些业务方法。
package com.powernode.spring6.service2;
public class MyService {
public void doSomething() {
System.out.println("Doing something in MyService...");
}
public String doSomethingElse(String input) {
System.out.println("Doing something else in MyService with input: " + input);
return "World " + input;
}
}
  • 创建切面类
package com.powernode.spring6.service2;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class JournalAspect {
// 前置通知
public void beforeAdvice(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
// 后置通知
public void afterAdvice(JoinPoint joinPoint) {
System.out.println("After method: " + joinPoint.getSignature().getName());
}
// 环绕通知
public Object aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("Entering method: " + proceedingJoinPoint.getSignature().getName());
Object result = proceedingJoinPoint.proceed(); // 继续执行目标方法
System.out.println("Exiting method: " + proceedingJoinPoint.getSignature().getName());
return result;
}
}
  • 配置Spring XML
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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 https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 定义服务bean -->
<bean id="myService" class="com.powernode.spring6.service2.MyService"/>
<!-- 定义切面bean -->
<bean id="journalAspect" class="com.powernode.spring6.service2.JournalAspect"/>
<!--启用AOP配置-->
<aop:config>
<!-- 定义一个切点,匹配com.example.myapp.service包下所有类的所有方法 -->
<aop:pointcut id="serviceMethods" expression="execution(* com.powernode.spring6.service2.*.*(..))"/>
<!--定义前置/后置/环绕通知-->
<aop:aspect ref="journalAspect">
<aop:around method="aroundAdvice" pointcut-ref="serviceMethods"/>
</aop:aspect>
</aop:config>
  • 测试:
@Test
public void aspectTest(){
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring-aspect.xml");
MyService myService = classPathXmlApplicationContext.getBean("myService", MyService.class);
// myService.doSomething();
String 你好 = myService.doSomethingElse("你好");
System.out.println(你好);
}
posted @   文采杰出  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示