SpringBoot基于自定义注解实现切面编程

网友投稿 909 2023-03-09

SpringBoot基于自定义注解实现切面编程

SpringBoot基于自定义注解实现切面编程

1、相关依赖包

org.springframework.boot

spring-boot-starter-aop

org.aspectj

aspectjrt

1.8.6

2、定义切面类

package com.bz.aspect;

import com.bz.service.SysLogOperationService;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.*;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

/**

* 操作日志,切面处理类

*/

@Aspect

@Component

public class LogOperationAspect {

@Autowired(required = false)

private SysLogOperationService sysLogOperationService;

@Pointcut("@annotation(com.bz.aspect.BzLogOperation)")

public void logPointCut() {

System.out.println("lllll");

}

/**

* 前置通知:方法执行前调用

*/

@Before("logPointCut()")

public void begin() {

System.out.println("前置通知:方法执行前调用");

}

/**

* 后置通知: 方法执行后调用,若方法出现异常,不执行

*/

@AfterReturning("logPointCut()")

public void afterReturning() {

System.out.println("后置通知: 方法执行后调用,若方法出现异常,不执行");

}

/**

* 最终通知:无论无何都会调用,类似于:try/catch中的finally

*/

@After("logPointCut()")

public void after() {

System.out.println("最终通知:无论无何都会调用,类似于:try/catch中的finally");

}

/**

* 异常通知:方法抛出异常时执行

*/

@AfterThrowing("logPointCut()")

public void afterThrowing() {

System.out.println("异常通知:方法抛出异常时执行");

}

/**

* 环绕通知

* 既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;

* 可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行;

* 可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值; 当需要改变目标方法的返回值时,只能使用Around方法;

*/

@Around("logPointCut()")

public void around(ProceedingJoinPoint point) throws Throwable {

// 获取切点方法的名称

String methodName = point.getSignature().getName();

// 获取方法传入参数

Object[] params = point.getArgs();

//转成字符

List objects = Arrays.asList(params);

objects.forEach(obj -> System.out.println(jsON.toJSONString(obj)));

System.out.println("环绕通知");

}

}

3、自定义切面注解类

package com.bz.aspect;

import java.lang.annotation.*;

/**

* @author: BuZheng

* @date: 2020-05-18 下午 2:02

*/

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface BzLogOperation {

String value() default "";

}

4、接口测试

@ApiOperation("切面测试")

@GetMapping("/aop")

@BzLogOperation("切面测试")

public ResultBean userList(@RequestParam(value = "keyWord") String keyWord) {

log.info("### 切面测试 ###");

return new ResultBean();

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信电脑版打开小程序闪退(微信电脑版打开小程序闪退怎么解决)
下一篇:微信小程序怎么制作自己的程序(微信小程序怎么制作自己的程序店铺)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~