spring boot 自定义注解切面简单样例

1. 导入jar

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2. 定义注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})//作用范围  方法
@Retention(RetentionPolicy.RUNTIME)//生命周期 代码运行时
public @interface Pass {
    boolean value() default false ;
}

3. 定义切面

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Aspect//切面标识
@Component//组件bean标识
@Order(100)//优先级 值越大越高
public class PassAspect {

    @Around("@annotation(pass)")//环绕型切面
    public Object invoked(ProceedingJoinPoint pjp, Pass pass) throws Throwable {
        if(pass.value()){
           pjp.proceed();
        }
        throw new RuntimeException("不通过");
    }
}

4. 使用样例

import org.springframework.stereotype.Component;

@Component//组件bean标识
public class Test {

    @Pass(true)
    void foo(){}

    @Pass()
    void foo1(){}
}

猜你喜欢

转载自blog.csdn.net/u013062667/article/details/79352306