当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序中使用AOP来记录方法调用及其参数

郤望
2023-03-14
public void someMethod(Object someArg, Object otherArg) {
    logger.trace("someMethod invoked with arguments {}, {}", someArg, otherArg);    

    // method body
}

有人能解释一下我如何向Spring Boot应用程序添加一个方面的具体步骤吗?该应用程序将为Spring bean上的所有方法调用生成一个日志语句,如上面所示?如果方面只能截获公共方法调用,那就足够了。

共有1个答案

翟渝
2023-03-14

诚然,只有在使用基于代理的Spring AOP框架时,您才可以为Spring bean的公共方法提供建议(就我个人而言,我发现这通常已经足够好了)。使用本机AspectJ编织,您可以建议任何方法。

首先,创建一个用@aspect注释的方面类,或者用@component进行组件扫描,或者在配置中声明为@bean

然后,在类中,您需要一个切入点来定义哪些方法被提示,以及一个建议来告诉要做什么(例如,在您的情况下做一些日志记录)。

@Pointcut("execution(public * *(..))")
public void publicMethod() {}
@Pointcut("within(@org.springframework.stereotype.Service *)")
public void withinService() {}
@Around("publicMethod() && withinService()")
public Object profileServiceMethods(ProceedingJoinPoint joinPoint) throws Throwable {
    // do some logging before method execution
    Object retVal = joinPoint.proceed();
    // and some logging after method execution
    return retVal;
}
 类似资料:
  • 本文向大家介绍SpringBoot AOP使用笔记,包括了SpringBoot AOP使用笔记的使用技巧和注意事项,需要的朋友参考一下 1. 启用AOP a. 在类上添加@Aspect注解 b. 注入该类, 可以使用@Component进行注入到Spring容器中 2. 通过PointCut对象创建切入点 a. 在某个方法使用类似下面的方法进行注入 i. 其中,execution表达式为 exec

  • 我对@Async和Rest模板调用有问题;下面是我的主要应用程序类,带有一个任务执行器Bean和EnableAsync注释 这是我在Rest控制器中调用的带有异步注释的my测试服务: 此服务在rest模板上返回一个nullPointer;这是stacktrace 但是如果我删除@enableAsync和@Async,那么简单的Rest模板可以很好地工作。 当我传递HttpServlet请求时,Ec

  • 本文向大家介绍SpringBoot项目中使用AOP的方法,包括了SpringBoot项目中使用AOP的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了SpringBoot项目中使用AOP的方法,分享给大家,具体如下: 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 示例项目 https:/

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=

  • 还有其他方法可以恢复流量的值吗?我不能用mono.bock因为它锁线程。

  • 是否有方法使用Spring AOP记录Spring Framework类下方法的进入和退出? 例如: 我希望在类中记录 的退出和退出 我尝试了以下操作。但没有运气:( 但我最终遇到了bean创建异常。