自定义注解

4 篇文章 0 订阅

创建注解

/**
 * 类:定义注解
 * 内容:
 * 创建人:frank-fu
 * 时间:2020/11/20
 */
//注解作用的位置,ElementType.METHOD表示该注解仅能作用于方法上
@Target({ElementType.METHOD})
//注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段
@Retention(RetentionPolicy.RUNTIME)
//子类会继承父类的注解
@Inherited
//注解信息会被添加到Java文档中
@Documented
public @interface TestAnnotation {
}

详解

  • @Target :注解是使用位置,作用到方法上,类…
  • @Retention :注解的生命周期,具体在什么阶段执行
  • @Inherited :表示该注解会被子类继承
  • @Documented :注解信息会被添加到Java文档中

创建注解拦截

/**
 * 类:注解拦截
 * 内容:
 * 创建人:frank-fu
 * 时间:2020/11/20
 */
//把普通pojo实例化到spring容器中,相当于配置文件中的
@Component
//作用是把当前类标识为一个切面供容器读取
@Aspect
public class TestAnnotationAspect {
    protected final Log log = LogFactory.getLog(this.getClass());
    @Before("@annotation(logger)")
    public void before(JoinPoint joinPoint, TestAnnotation logger) {
        log.info("测试注解,方法开始");
    }
    @After("@annotation(logger)")
    public void after(JoinPoint joinPoint, TestAnnotation logger) {
        log.info("测试注解,方法结束");
    }
    @Around("@annotation(logger)")
    public Object around(ProceedingJoinPoint joinPoint, TestAnnotation logger) throws Throwable{
        log.info("测试注解,方法开始结束1");
        Object proceed = joinPoint.proceed();
        log.info("测试注解,方法开始结束2");
        return proceed;
    }
}

详解

  • @Component :自动装载该对象
  • @Aspect :切面,可以拦截对应的注解
  • @Before :前置通知, 在方法执行之前执行
  • @After :后置通知, 在方法执行之后执行 。
  • @Around :环绕通知, 围绕着方法执行

使用注解

/**
 * 类:
 * 内容:
 * 创建人:frank-fu
 * 时间:2020/11/20
 */
@RestController
public class TestController {

    protected final Log log = LogFactory.getLog(this.getClass());

    @ApiOperation(value = "测试接口")
    @PostMapping(value = "test/annotation")
    @TestAnnotation
    public String annotation(@RequestBody ReqQueryVO vo){
        log.info("测试接口执行中: " + JSON.toJSONString(vo));
        return "你好";
    }
}

输出结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值