SpringBoot 注解实现AOP

基本思路就是开发注解,再开发一个切面,注解标注在方法上,当方法被执行的时候,进行切面的植入,具体方法如下。

1、开发注解OnceTokenCheck,该注解只能修饰方法(若注解需要修饰类或者参数,则自己修改即可)

package com.weijia.commonutils.validate.token.aop;
import java.lang.annotation.*;

@Documented
@Target({ElementType.METHOD})//注解可标注的对象(这里只能标注方法,如果要标注参数或者类请自行修改)
@Retention(RetentionPolicy.RUNTIME)
public @interface OnceTokenCheck {
    String key() default "onceToken";//注解参数,默认值也可以根据需求更改
}

2、开发切面类,切面类中的方法植入到被注解OnceTokenCheck修饰的方法上,这里主要使用环绕通知,因为环绕通知可以回调原有方法。

@Aspect
public class OnceTokenCheckAspect {

    //只有被OnceTokenCheck标注的方法才执行植入aop
    @Pointcut("@annotation(com.weijia.commonutils.validate.token.aop.OnceTokenCheck)")
    public void pointCut(){

    }

    @Around("pointCut()")
    public Object around(ProceedingJoinPoint jp) throws Throwable{
        //获得注解
        MethodSignature signature = (MethodSignature) jp.getSignature();
        OnceTokenCheck onceTokenCheck =
        signature.getMethod().getAnnotation(OnceTokenCheck.class);
        //注解上的属性
        String key = onceTokenCheck.key();
        System.out.println("注解属性key:"+onceTokenCheck.key());
        //连接点方法的实参值
        Object[] args = jp.getArgs();
        //获取连接点方法的参数名称
        String[] names = ((CodeSignature) jp.getSignature()).getParameterNames();

        for (int k = 0; k < args.length; k++) {
            //参数类型,返回例如java.lang.String
            String type = args[k].getClass().getName();
        }

        //连接点方法的方法名
        String methodName = jp.getSignature().getName();
        System.out.println("方法名:"+methodName);
        //连接点方法所在的对象
        Object targetObj = jp.getTarget();
        //连接点方法所在的对象的名称
        String targetClassName=targetObj.getClass().getName();
        Object result=null;
        result=jp.proceed(args);//回调原有方法,并传入参数
        return result;
    }
}

3、调用示例

最后可以在控制台查看结果,调用testaop这个函数的时候将会看到一些日志信息的输出。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值