首页 > 数据库 > 数据库开发技术 > 轻松且优雅的 Spring 注解工具类
工作多年我发现一个有趣的现象,有的同学会在项目代码中自己去写很多基础代码,比如使用 JDK 提供的 I/O API 等等。 我不是说这样做不好,只是没必要(good but wrong , 你是个好人...),尤其是在商业项目中。 首先这样做并不能让我们的效率提高,其次自己编写的代码也许并没有开源项目质量高, 最重要的一点是这样做真的会让自己很累。我是不大理解为什么很多公司招聘的时候都要写上要求能吃苦耐劳, 当然了吃苦耐劳本身并没有错能表现出一个人的坚强的意志力。但也不适用于所有的场景,就像事实证明人多不一定力量大。 换个角度想与其吃苦耐劳我们能不能偷懒呢,想想有没有更聪明,高效的办法让我们完成工作呢。做一个懒惰的程序员,但前提是做一个 聪明且懒惰的程序员。
本章介绍 Spring 中提供的注解处理工具类 MergedAnnotations 非常的简洁、易用,
用过的都说好。
MergedAnnotations 合并了一个或多个注解的注解"集合"类。因为在JDK中提供获取注解的api过于简易,稍微复杂一点的场景就无法满足需要自己编写
很多的代码,例如:
所以Spring提供了 MergedAnnotations ,使获取注解上更加的容易。简单来说 MergedAnnotations 的作用就是搜索注解。
「搜索策略」
SearchStrategy 提供了五种搜索范围:
DIRECT :只查找元素上直接声明的注解,不包括通过@Inherited继承的注解;
INHERITED_ANNOTATIONS :只查找元素直接声明或通过@Inherited继承的注解;
SUPERCLASS :查找元素直接声明或所有父类的注解;
TYPE_HIERARCHY :查找元素、所有父类以及实现的父接口的全部注解;
TYPE_HIERARCHY_AND_ENCLOSING_CLASSES :查找查找元素、所有父类以及实现的父接口、封闭类以及其子类的全部注解。
封闭类是 JDK17 的新特性,可参考 详解 Java 17中的新特性:“密封类”,本章将不过多涉及该内容;
「使用」
MergedAnnotations 比较常用的两个方法:
static MergedAnnotations from(AnnotatedElement element);
static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStrategy);
MergedAnnotations 其他方法:
// 判断注解是否存在,会从所有的注解中判断
<A extends Annotation> boolean isPresent(Class<A> annotationType);
// 判断注解是否存在,会从所有的注解中判断,与上面的方法不同的是,这里传入的是字符串
boolean isPresent(String annotationType);
// 判断直接注解是否存在,也就是只判断当前类上有没有该注解,不判断注解的注解
<A extends Annotation> boolean isDirectlyPresent(Class<A> annotationType);
// 功能同上,这里传入的类型是字符串,格式为"包名.类名"
boolean isDirectlyPresent(String annotationType);
// 获取注解
<A extends Annotation> MergedAnnotation<A> get(Class<A> annotationType);
// 获取注解,这里传入的类型是字符串,格式为"包名.类名"
<A extends Annotation> MergedAnnotation<A> get(String annotationType);
MergedAnnotations 是组合注解的集合,提供的注解可以判断某注解是否存在,也可以获取其中的某个注解。
通过 MergedAnnotations 可以获取到 MergedAnnotation 。
MergedAnnotation 是注解的数据抽象,它提供了丰富的api用来获取注解的数据。
非常的轻松写意且优雅,不用自己再去写一堆代码了,一行代码即可搞定。为了让大家能偷懒摸鱼我也是操碎了心。
欢迎加入 DevXTalk 的程序员、架构师、IT从业者交流群,在这里你可以和大佬们一起交流分享技术,行业经验,职位内推,摸鱼聊天。总之期待你的加入...
添加我的wx,备注:“进群”拉你进群(群二维码有效时间太短维持不了几天)
「看完本文有收获?转发给更多的朋友吧」
「DevXTalk 不止于技术」
原文作者:DevXTalk;如有侵权,请联系管理员删除。