当前位置: 首页 > news >正文

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: 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。

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

@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 {};
}
使用自定义的注解,只需要在方法上面加上
    @LockMethod(lockKeyInfo = Constants.DAY_END_JOB,waitTime = WAIT_TIME,leaseTime = LEASE_TIME)public void test() {
}

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

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

 

http://www.lryc.cn/news/140124.html

相关文章:

  • 前端需要理解的设计模式知识
  • 1、攻防世界第一天
  • 分布式事务(7):SpringCloud2.0整合LCN
  • 机器学习实战14-在日本福岛核电站排放污水的背景下,核电站对人口影响的分析实践
  • 4G智慧电力物联网:建设高效智能,引领电力行业革新!
  • 安防视频监控平台EasyCVR视频集中存储平台接入RTSP设备出现离线情况的问题解决方案
  • 达梦数据库分区表介绍
  • Python爬虫库之urllib使用详解
  • SpringCloud学习笔记(八)_使用Apollo做配置中心
  • jvs-rules(规则引擎)更新:新增功能介绍
  • 消息队列的消息异常处理
  • APP上线为什么要提前部署安全产品呢?
  • SQL注入之HTTP头部注入
  • 软考高级系统架构设计师系列论文九十七:论软件三层结构的设计
  • 【C++心愿便利店】No.2---函数重载、引用
  • 掌握Six Sigma:逐步解锁业务流程优化的秘密之匙
  • Python中使用print()时如何实现不换行
  • WordPress使用子主题插件 Child Theme Wizard,即使主题升级也能够保留以前主题样式
  • 人员跌倒检测识别预警
  • C#,《小白学程序》第二课:数组与排序
  • 2023有哪些更好用的网页制作工具
  • Keepalived(一)
  • cs231n assignment3 q5 Self-Supervised Learning for Image Classification
  • 电商首屏设计
  • SpringBoot集成Redis
  • qt 的基础学习计划列表
  • CSS中如何改变鼠标指针样式(cursor)?
  • SpringMVC-2-Spring MVC拦截器详解:从入门到精通
  • 探索AIGC人工智能(Midjourney篇)(一)
  • 【IMX6ULL驱动开发学习】11.Linux之SPI驱动