如题,具体详情还请各位高抬贵手猛搓下方连接(并非偷懒而是之前就在segmentfault发了问题,而且贴了代码,感觉给个地址更方便。)
segmentfault传送门
spring 基于aop 实现日志输出 定义在controller层无效
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-04 13:43关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要使用Spring框架的AOP(面向切面编程)来实现基于控制器层的日志输出功能,你需要按照以下步骤操作:
- 首先确保你已经引入了必要的依赖库:
<!-- AOP相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>- 在你的Spring配置类中定义AOP切面和切点。
@Configuration public class LoggingAspectConfig { @Bean public AdviceMatcher adviceMatcher() { return new AdviceMatcher(); } @Bean public LogAdvice logAdvice(LoggingAspectConfig adviceMatcher) { return new LogAdvice(adviceMatcher); } } @Component class LogAdvice implements AroundInvokeAdvisory { private final AdviceMatcher adviceMatcher; public LogAdvice(AdviceMatcher adviceMatcher) { this.adviceMatcher = adviceMatcher; } @Override public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable { // 开始记录日志 System.out.println("Before " + joinPoint.getSignature().getName()); try { // 执行方法 Object result = joinPoint.proceed(); // 结束记录日志 System.out.println("After " + joinPoint.getSignature().getName()); return result; } catch (Throwable e) { throw new RuntimeException(e.getMessage(), e); } } }- 将上述配置添加到Spring配置文件中。
@Configuration public class AppConfig { @Autowired private LoggingAspectConfig loggingAspectConfig; @Bean public LoggingAspect loggingAspect() { return new LoggingAspect(loggingAspectConfig); } }- 最后,在你的Controller或Service层使用
@Around注解标记方法,并传入LogAdvice作为参数,这样就可以在方法执行前后自动打印日志信息了。
例如,如果你有一个名为
MyController的Controller,你可以这样做:@Controller public class MyController { @RequestMapping(value = "/my-endpoint", method = RequestMethod.GET) @AroundInvoke public Object myMethod(@AroundInvokeArgs ProceedingJoinPoint pjp) throws Throwable { System.out.println("Starting myMethod"); try { // 执行业务逻辑 return pjp.proceed(); } finally { System.out.println("Ending myMethod"); } } }以上就是使用Spring框架基于AOP实现日志输出的基本步骤。请注意,这只是一个基本示例,实际应用可能需要根据你的具体需求进行调整。
解决 无用评论 打赏 举报