springbootaop打印出入参配置(自定义注解)

编程

 

背景:目前项目做中台建设,要求统一打印DB操作的出入参,并以json格式输出。

 

  1. 方案描述:

 

基于Spring Boot项目,通过自定义注解,使用AOP对自定义注解配置前置通知、后置通知对参数进行处理。日志处理使用slf4j处理,需要打印日志的类只需添加@Slf4j注解。@Profile({"dev", "test",prod})可以配置在配置切面的类上,这样可以选择在哪个环境使用该切面配置。

 

  1. 实施步骤:

  1. Spring项目添加maven依赖spring-boot-starter-aop注入AOP功能,添加gson依赖注入json输出功能。

<dependency>

        <groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

<dependency>

    <groupId>com.google.code.gson</groupId>

    <artifactId>gson</artifactId>

    <version>2.8.5</version>

</dependency>

 

  1. 自定义注解,如下定义

 

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.METHOD})

@Documentedpublic @interface DBLog {

    String description() default "";

}

 

  1. 配置切面

 

c1、配置切点:创建DBLogAspect类,使用@Pointcut注解声明切点。如下代码

@Pointcut(“DBLog ”)

Public void dbParameterLog(){

//empty

}

c2、定义@Around环绕通知,用于记录执行时间。如下代码

@Around("dbParameterLog()")

    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {

        long startTime = System.currentTimeMillis();

        Object ob = pjp.proceed();// ob 为方法的返回值

   logger.info("Response Args  : {}", new Gson().toJson(result));

        logger.info("耗时 : " + (System.currentTimeMillis() - startTime));

        return ob;

}

 

C3、定义@Before通知打印入参。代码如下

@Before("dbParameterLog()")

     public void doBefore(JoinPoint joinPoint) throws Throwable {

         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

        HttpServletRequest request = attributes.getRequest();

   loggger.info("参数 : " + joinPoint.getArgs());

    }

 

C4、定义@AfterReturning通知打印出参。代码如下

 @AfterReturning(returning = "ret", pointcut = "dbParameterLog()")

     public void doAfterReturning(Object ret) throws Throwable {

         logger.debug("返回值 : " + JSON.toJSONString(ret));

     }

 

C5、定义@After通知打印方法内代码逻辑执行结束。代码如下

@After("webLog()")

     public void doAfter() throws Throwable {

         logger.info("======= End ============" + LINE_SEPARATOR);

     }

 

d、如何使用

DBLog 注解添加到CRUD的接口上就可以打印参数。

以上是 springbootaop打印出入参配置(自定义注解) 的全部内容, 来源链接: utcz.com/z/513760.html

回到顶部