ITPub博客

首页 > 数据库 > 数据库开发技术 > 轻松且优雅的 Spring 注解工具类

轻松且优雅的 Spring 注解工具类

原创 数据库开发技术 作者:DevXTalk 时间:2024-01-28 15:08:18 0 删除 编辑

轻松且优雅的 Spring 注解工具类

工作多年我发现一个有趣的现象,有的同学会在项目代码中自己去写很多基础代码,比如使用 JDK 提供的 I/O API  等等。 我不是说这样做不好,只是没必要(good but wrong , 你是个好人...),尤其是在商业项目中。 首先这样做并不能让我们的效率提高,其次自己编写的代码也许并没有开源项目质量高, 最重要的一点是这样做真的会让自己很累。我是不大理解为什么很多公司招聘的时候都要写上要求能吃苦耐劳, 当然了吃苦耐劳本身并没有错能表现出一个人的坚强的意志力。但也不适用于所有的场景,就像事实证明人多不一定力量大。 换个角度想与其吃苦耐劳我们能不能偷懒呢,想想有没有更聪明,高效的办法让我们完成工作呢。做一个懒惰的程序员,但前提是做一个 聪明且懒惰的程序员。

本章介绍 Spring 中提供的注解处理工具类 MergedAnnotations 非常的简洁、易用, 用过的都说好。

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;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-03-23

  • 博文量
    178
  • 访问量
    82583