springBoot自定义注解的使用

晚上睡不着看了看自定义注解,记录下学习过程

参考https://blog.csdn.net/qq_37435078/article/details/90523309

自定义注解其实是使用springAop来实现的(我只会这么用,轻喷!)

我们尝试写一个自定义注解,并将注解中的值输出到控制台

实现步骤如下

start

1. 定义一个注解类

2. 定义一个java类,用来“实现”这个注解(类似接口和实现类)

3. 定义一个controller,service,entity 用来测试注解

end

 

定义注解  代码如下

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

    String value() default "";

}
  • @Documented:注解信息会被添加到Java文档中
  • @Retention:注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段
  • @Target:注解作用的位置,ElementType.METHOD表示该注解仅能作用于方法上

之后 我们将注解添加到方法上,代码如下

@RestController
public class UserController {

    @Slog("我是日志")
    @RequestMapping("user")
    public void TestAspect() {
    }
}

好了,接下来就进入正题,开始写注解的“实现”

定义一个注解切面类

注意,@Aspect这个注解需要添加jar包,也就是说需要在pom文件加入依赖,如下:

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

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

之后就可以正常添加了。

@Component
@Aspect
public class SlogAspect {

    @Pointcut("@annotation(com.example.demo.annotation.Slog)")
    private void pointcut() {
    }
    
    @Before("pointcut() && @annotation(logger)")
    public void advice(JoinPoint joinPoint, Slog logger) {
        System.out.println(logger.value());
    }
}

 

其中  @Pointcut注解   用于定义切入点,也就是在标记有Slog注解的方法上进行切入

@Before中的pointcut()这么写的原因是声明,我们要在这个切入点的执行前后(之前,之后,环绕等)进行一些逻辑处理,然后通过@annotation(logger)可以获得自定义注解对象赋予的值,也就是@Slog("我是日志")中的括号内容

之后重启项目(添加,修改注解的实现后都需要重启来让注解生效)。

在控制台就可以看到我们输出的日志了

2020-12-28 02:34:31.601  INFO 3520 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-12-28 02:34:31.602  INFO 3520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-12-28 02:34:31.602  INFO 3520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
我是日志

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值