springboot使用自定义注解实现灵活切面

springboot使用自定义注解实现灵活切面

    • 添加依赖
    • 添加模块

现在springboot项目使用的大多是自定义注解来实现切面,现在就来做一个小demo

添加依赖


        org.springframework.boot
        spring-boot-starter-aop
    

添加模块

新建一个UserController

	@RestController
	@RequestMapping("/user")
	public class UserController {
	    @GetMapping
	    @AspectionAnnotation
	    public void test() {
	        System.out.println("方法执行");
	    }
	}

新建一个自定义注解ApectionAnnotation

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AspectionAnnotation {
}

关于@Target、@Retention、@Document等元注解,请自行百度

新建一个切面类AspectTest

@Component
@Aspect
public class AspectTest {

    @Pointcut("@annotation(com.fandy.testannotation.annotation.AspectionAnnotation)")
    public void pointCut() {}

    @Before("pointCut()")
    public void before() {
        System.out.println("我在方法执行前执行");
    }

    @After("pointCut()")
    public void after() {
        System.out.println("我在方法执行后执行");
    }

    @AfterReturning("pointCut()")
    public void afterReturn() {
        System.out.println("我在方法执行后执行,如果方法有异常则不执行");
    }

    @Around("pointCut()")
    public void around(ProceedingJoinPoint joinPoint) throws Throwable{
        System.out.println("我在方法执行前一刻执行");
        joinPoint.proceed();
        System.out.println("我在方法执行后一刻执行,环绕通知可查看连接点的方法和参数,可进行操作验证");
    }
}

主要就是这几个步骤了,关于具体的,也不知道说些什么,哦,对了,截一下控制台的输出的图,就可以看到输出的顺序,对比一下,就知道@Before、@After、@AfterReturning、@around注解修饰的方法的执行顺序了
springboot使用自定义注解实现灵活切面_第1张图片

你可能感兴趣的:(JAVA,aop,spring,boot)