如何为Service Impl类的addMoneyToWallet()方法实现Before通知逻辑
实现Spring AOP Before通知记录方法执行时间
1. 确认依赖(Spring Boot场景)
如果是Spring Boot项目,先确保引入AOP starter依赖:
Maven(pom.xml):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
Gradle对应添加依赖即可。
2. 你的Service Impl类示例
假设你的业务实现类结构如下:
import org.springframework.stereotype.Service; import java.math.BigDecimal; @Service public class WalletServiceImpl { public void addMoneyToWallet(Long userId, BigDecimal amount) { // 实际的钱包加钱业务逻辑 System.out.println("为用户" + userId + "充值:" + amount + "元"); } }
3. 编写切面类实现Before通知
这是核心实现,通过注解将类声明为Spring Bean和切面,同时定义切入点与通知逻辑:
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Aspect @Component public class WalletOperationLogAspect { // 初始化日志实例 private static final Logger logger = LoggerFactory.getLogger(WalletOperationLogAspect.class); // 定义日期格式化规则 private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); // 定义切入点:精准匹配WalletServiceImpl的addMoneyToWallet方法 @Pointcut("execution(* com.your.package.service.impl.WalletServiceImpl.addMoneyToWallet(..))") public void addMoneyOperation() {} // Before通知:在切入点方法执行前触发 @Before("addMoneyOperation()") public void logBeforeAddMoney() { String currentTime = LocalDateTime.now().format(TIME_FORMATTER); logger.info("准备执行addMoneyToWallet方法,当前时间:{}", currentTime); } }
关键细节说明
@Aspect:标记当前类为AOP切面类@Component:将切面类纳入Spring容器管理,成为Bean- 切入点表达式
execution(* com.your.package.service.impl.WalletServiceImpl.addMoneyToWallet(..)):*表示匹配任意返回值类型com.your.package.service.impl替换为你实际的ServiceImpl所在包路径(..)表示匹配任意数量、任意类型的方法参数
- 日志输出使用SLF4J标准Logger,避免直接依赖具体日志实现
执行效果
当调用WalletServiceImpl.addMoneyToWallet()方法时,控制台会先输出INFO级别的时间日志,再执行业务逻辑:
2024-05-20 15:42:30.456 INFO 9876 --- [main] c.y.p.s.i.WalletOperationLogAspect : 准备执行addMoneyToWallet方法,当前时间:2024-05-20 15:42:30.456 为用户1002充值:200.00元
内容的提问来源于stack exchange,提问作者Maria Torp
相关产品推荐
相关产品推荐

