【注】实现在SpringBoot项目中,同时给两个类的方法添加AOP前置通知
1、创建一个SpringBoot项目
2、创建两个目标类和方法
package com.tqazy.learn_spring_project.spring_aop;
import org.springframework.stereotype.Service;
/**
* @ClassName SpringAopUserService
* @Description 用户逻辑类
* @Author 散场前的温柔
* @Date 2023/8/13 19:56
* @Version 1.0
*/
@Service
public class SpringAopUserService {
public void addUser(String userName) {
System.out.println("本次新增用户:" + userName);
}
public void addUser() {
System.out.println("本次新增用户:默认用户");
}
}
package com.tqazy.learn_spring_project.spring_aop;
import org.springframework.stereotype.Service;
/**
* @ClassName SpringAopUserService
* @Description 订单逻辑类
* @Author 散场前的温柔
* @Date 2023/8/13 19:56
* @Version 1.0
*/
@Service
public class SpringAopOrderService {
public void addOrder(String orderNo) {
System.out.println("本次新增订单:" + orderNo);
}
public void addOrder() {
System.out.println("本次新增订单:No0001");
}
}
3、创建一个日志切面类
package com.tqazy.learn_spring_project.spring_aop;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
/**
* @ClassName LogAspect
* @Description 日志切面类
* @Author 散场前的温柔
* @Date 2023/8/13 19:58
* @Version 1.0
*/
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.tqazy.learn_spring_project.spring_aop.*Service.add*(..))")
public void before() {
System.out.println("日志:添加方法开始!");
}
@After("execution(* com.tqazy.learn_spring_project.spring_aop.*Service.add*(..))")
public void after() {
System.out.println("日志:添加方法完成!");
}
}
【注1】:*Service
匹配SpringAopOrderService
和SpringAopUserService
【注2】:add*(..)
的是为了匹配方法名,* (..)
是为了匹配方法的任意参数(这里的是execution(
后的*)
4、创建一个调用类
package com.tqazy.learn_spring_project.spring_aop;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @ClassName SpringAopTestController
* @Description 调用类
* @Author 散场前的温柔
* @Date 2023/8/13 20:02
* @Version 1.0
*/
@RestController
@RequestMapping("/aop")
public class SpringAopTestController {
@Resource
private SpringAopUserService userService;
@Resource
private SpringAopOrderService orderService;
@GetMapping("/testMethod")
public void testMethod() {
userService.addUser();
userService.addUser("指定用户");
orderService.addOrder();
orderService.addOrder("No0002");
}
}
5、运行项目
- 启动项目成功
- 浏览器访问http://localhost:8080/aop/testMethod
- 编辑器控制台就会打印内容
完成实现!