Spring中的自定义注解

在Spring中,注解是一种非常使用的工具。

因其强大的功能,极大的提高了我们开发效率。

但是当遇到一些特殊业务时,框架自有的注解已经不能满足我们的需求了,这时我们就可以添加自定义注解来满足我们的业务需求。

我们用@interface来声明这是一个注解类。

另外需要在这个注解类上,再添加@Target 和 @Retention两个注解,来声明自定义注解的生效范围和生命周期。

@Target:

  • ElementType.TYPE:说明该注解只能被声明在一个类前。
  • ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
  • ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
  • ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
  • ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
  • ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
  • ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
  • ElementType.PACKAGE:说明该注解只能声明在一个包名前

@Retention:

  • RetentionPolicy.SOURCE: 注解只保留在源文件中
  • RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
  • RetentionPolicy.RUNTIME: 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。

来看一段自定义注解的代码

java 复制代码
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LockMethod {

    long waitTime() default 60L ;

    long leaseTime() default 60*1000L ;
    /**
     * 锁key
     * @return
     */
    String[] lockKeyInfo() ;
    /**
     * 锁参数下标列表,对应下标的参数值会作为锁Key的一部分
     * @return
     */
    int[] lockKeyArgIndexList() default {};
}
复制代码
使用自定义的注解,只需要在方法上面加上
java 复制代码
    @LockMethod(lockKeyInfo = Constants.DAY_END_JOB,waitTime = WAIT_TIME,leaseTime = LEASE_TIME)
    public void test() {
}

这只是简单地定义了一个注解,但是实际的开发工作中,自定义注解一般搭配Aop使用

比如设定加了自定义注解的方法执行前要做什么,执行后要做什么,具体如何使用也要根据具体的业务场景来实现~~

复制代码
相关推荐
野犬寒鸦6 分钟前
从零起步学习MySQL || 第七章:初识索引底层运用及性能优化(结合底层数据结构讲解)
java·数据库·后端·mysql·oracle
ScriptBIN11 分钟前
管理和构建Java项目的工具--Maven
java·maven
全职计算机毕业设计18 分钟前
基于SpringBoot框架的在线教育系统设计与实现(三套文档参考)
java·spring boot·后端
No8g攻城狮26 分钟前
【异常解决】使用DateUtil.isSameDay()方法判断秒级时间戳是否属于同一天踩过的坑
java·jvm·spring boot·java-ee·springboot
IT_陈寒28 分钟前
Python性能优化:5个被低估但效果惊人的内置函数实战解析
前端·人工智能·后端
再睡一夏就好31 分钟前
【C++闯关笔记】深究继承
java·数据结构·c++·stl·学习笔记
千码君20161 小时前
Go语言:对其语法的一些见解
开发语言·后端·golang
天若有情6731 小时前
TFword:从字符到片段,解析一个“小而精”的字符串处理工具的设计智慧
java·jvm·算法
那我掉的头发算什么1 小时前
【数据结构】反射、枚举、lambda表达式以及补充知识
java·jvm·数据结构·intellij idea
Hello.Reader1 小时前
在 Flink 中用好 Java 8 Lambda类型推断、`.returns(...)` 与常见坑位
java·python·flink