自定义注解中--方法注解

声明:以下代码等都默认已经引入相应的包,还有配置的包扫描范围已经弄好,这里只是作为一个示例,对于没有对应环境的情况,可以先百度,当然相应的之后这边博客也会加上相应配置的教程。

自定义注解–方法注解

1.创建对应自定义注解

/**
 * 模拟日志自定义注解
 * @author xcf
 * @Description
 * @date $ $
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodAnnotation {

    /**
     * 模块名称
     * @return
     */
    public String title() default "";

    /**
     * 功能
     * @return
     */
    public String bussinessType() default "other";

    /**
     * 操作级别
     * @return
     */
    public String operatorType() default "other";

}

这里使用元注解:Target和Retention。
其中,Target里面声明为ElementType.METHOD,代表的意思是:注解的作用目标是方法
Retention声明为RetentionPolicy,代表的意思是:注解的保留位置是:注解会在class字节码文件中存在,在运行时可以通过反射获取到

关于这两个元注解的含义等,可以参照

https://blog.csdn.net/xcy1193068639/article/details/81464165

这里拷贝了主要内容如下:
在这里插入图片描述
–以上只是图片,作为对来源作者的尊重,如果需要请移步到原创那边拷贝

2.创建对应的切面类

/**
 * @author xcf
 * @Description
 * @date $ $
 */
@Aspect
@Component
public class MethodAspect {

    @Pointcut("@annotation(com.project.xcfmodel.annotation.MethodAnnotation)")
    public void methodAspectAnno(){};

    @After("methodAspectAnno()")
    public void afterMethod(JoinPoint joinPoint){
        System.out.println("进入After方法");
    }

    /**
     * 在这个步骤处理日志的记录等
     * @param joinPoint
     * @param jsonResult
     */
    @AfterReturning(pointcut = "methodAspectAnno()", returning = "jsonResult")
    public void afterReturning(JoinPoint joinPoint, Object jsonResult){
        System.out.println("进入afterReturning方法");
        /*下面需要做两个事情:1.获取注解中的三个内置参数。2.获取调用的方法,类等等*/
        //1.获取注解中的三个内置参数
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();//转为method对应的Signature
        Method method = methodSignature.getMethod();//获取当前method对象
        MethodAnnotation annotation = method.getAnnotation(MethodAnnotation.class);//获取method对象中对应的注解对象
        System.out.println("模块名称" + annotation.title());
        System.out.println("功能" + annotation.bussinessType());
        System.out.println("操作级别" + annotation.operatorType());

        //2.获取调用的方法,类等等
        String name = joinPoint.getSignature().getName();
        System.out.println("当前调用方法" + name);
        String className = joinPoint.getTarget().getClass().getName();
        System.out.println("当前调用类" + className);

        System.out.println("返回参数" + jsonResult);

        //以下就是将这些参数记录到日志文件中,这里就不演示了,需要的信息都在上面获取出来了
    }

}

这里配置了对应切面类需要的参数并获取所需参数

3.在controller方法中调用当前定义的注释

/**
 * @author xcf
 * @Description
 * @date $ $
 */
@RestController
public class TestController {

    /**
     * 这里添加了注释,声明了模块名称,功能,操作级别
     * @return
     */
    @MethodAnnotation(title = "test", bussinessType = "test", operatorType = "admin")
    @GetMapping("/testMethod")
    public String testMethod(){
        return "testMethod";
    }

}

可以看到,这个注解写在方法中,并且声明了对应的模块名称,功能,操作级别,
这样子就能在切面类中获取到对应声明的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值