目录

一、Reflections能够做什么

二、如何使用

2.1、 在maven项目中添加如下依赖

2.2、使用示例

2.2.1、实例化

2.2.2、根据父类获取所有子类

2.2.3、根据接口获取所有实现类

2.2.4、根据注解获取所有类

2.2.5、根据注解获取所有方法

2.2.6、根据方法返回类型获取所有方法

2.2.7、根据方法签名获取所有方法

2.2.8、根据表达式获取所有资源文件

三、项目中使用


一、Reflections能够做什么

反射扫描和索引项目的类路径元数据,允许在运行时对类型系统进行反向传递查询。

使用反射,您可以查询元数据,例如:

  1. 获取某种类型的所有子类型

  2. 获取所有类型/构造函数/方法/字段,并使用一些注释进行注释,可选地使用匹配的注释参数

  3. 获取匹配正则表达式的所有资源

  4. 获取具有特定签名的所有方法,包括参数、参数注释和返回类型

  5. 获取所有方法参数名称

  6. 获取代码中的所有字段/方法/构造函数用法

二、如何使用

2.1、 在maven项目中添加如下依赖

<dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.10.2</version>
</dependency>

2.2、使用示例

2.2.1、实例化

//指定包路径,默认支持Scanners.TypesAnnotated, Scanners.SubTypes 两种扫描类型Reflections reflections = new Reflections("com.dora.distribution");//指定包路径和扫描类型Reflections reflections = new Reflections("com.koala.distribution", Scanners.MethodsAnnotated);//使用Configuration实例化Reflections reflections = new Reflections(ConfigurationBuilder.build().forPackage("com.dora.distribution").setScanners(Scanners.values()));

2.2.2、根据父类获取所有子类

 Reflections reflections = new Reflections("com.dora.distribution");//根据父类型查询所有子类型Set<Class<? extends ApplicationEvent>> bySuperClass = reflections.getSubTypesOf(ApplicationEvent.class);

2.2.3、根据接口获取所有实现类

Reflections reflections = new Reflections("com.dora.distribution");
//根据接口查询所有实现类
Set<Class<? extends ApplicationListener>> byInterfaces = reflections.getSubTypesOf(ApplicationListener.class);

2.2.4、根据注解获取所有类

Reflections reflections = new Reflections(ConfigurationBuilder.build().forPackage("com.dora.distribution").setScanners(Scanners.values()));
//根据注解扫描
Set<Class<?>> typesAnnotatedWith = reflections.getTypesAnnotatedWith(RestController.class);

2.2.5、根据注解获取所有方法

  //指定包路径和扫描类型
Reflections reflections = new Reflections("com.dora.distribution", Scanners.MethodsAnnotated);
Set<Method> methodsAnnotatedWith = reflections.getMethodsAnnotatedWith(RequestMapping.class);

2.2.6、根据方法返回类型获取所有方法

 Reflections reflections = new Reflections("com.dora.distribution", Scanners.values());Set<Method> byReturnMethods = reflections.getMethodsReturn(String.class);

2.2.7、根据方法签名获取所有方法

 Reflections reflections = new Reflections("com.dora.distribution", Scanners.values());
Set<Method> methodsWithSignature = reflections.getMethodsWithSignature(LoginEvent.class);

2.2.8、根据表达式获取所有资源文件

Reflections reflections = new Reflections("com.dora.distribution", Scanners.values());
Set<String> resources = reflections.getResources(".*\\.properties");

三、项目中使用

在Spring 项目中监听SpringEvent只需要在处理方法中增加一个注解 @EventListener 如下:

@Service
@Slf4j
public class PushNotifyService {@EventListener(LoginEvent.class)public void sendPush(LoginEvent loginEvent) {log.info("listener 接收到事件是:{}", loginEvent);}
}

在有消息触达的时候就可以使用该方法进行处理,如果我们在自己的项目中也使用类似的设计,就可以使用 Reflections来根据方法的注解来扫描所有方法

Reflections一个强大的类扫描工具介绍相关推荐

  1. 常用操作系统扫描工具介绍(转)

    原文地址:https://www.cnblogs.com/JeanX/p/5569423.html 常用操作系统扫描工具介绍 1      常用操作系统扫描工具介绍 1.1      CIS-CAT ...

  2. 常用操作系统扫描工具介绍

    1      常用操作系统扫描工具介绍 1.1      CIS-CAT [功能] 可以根据不同的操作系统,选择不同的基准进行系统漏洞扫描. [适用对象] Unix/Linux,MS Windows, ...

  3. cansina 目录_一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑。...

    Dirmap 一个高级web目录扫描工具,功能将会强于DirBuster.Dirsearch.cansina.御剑 需求分析 经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能: 并发引擎 ...

  4. 强大的漏洞扫描工具--nessus

    Nessus<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 漏 ...

  5. 一款强大的端口扫描工具(nmap)

    一款强大的端口扫描工具(nmap) 文章目录 一款强大的端口扫描工具(nmap) 前言 一.Nmap 使用技巧汇总 一.主机发现 二.端口扫描 三.指纹识别与探测 四.伺机而动 五.防火墙/IDS逃逸 ...

  6. 安利一个强大的java小工具

    hello,小伙伴们,我是小雨滴,相信不少小伙伴在开发过程中会用到很多小工具,比如,有个订单号码需要截图识别并复制出来,需要截图并自动识别.可能会使用到有道云等笔记来记录日常待办事项.比如复制出来的j ...

  7. android串口工具apk_【APK】一个强大的Android开发工具!

    排版|设计|配图©孤狼小航 Android开发助手是个强大的Android开发工具,能够用来反编译其他应用.查看其他应用布局和控件信息.屏幕取色(颜色取样器).查看Activity历史记录.查看应用M ...

  8. Java 压缩解压缩 第三方组件,推荐一个强大的Java开发工具类库!

    feilong开发更简便的工具库 Reduce development, Release ideas (灵感从重复简单的代码中释放出来) 让你从大量重复的底层代码中脱身,提高工作效率; 让你的代码更简 ...

  9. linux python pyenv,在Centos中安装并使用Pyenv,一个强大的Python版本管理工具

    Python发展到现在已经很强大了,各种开发相信大家都可以随心应对.但是唯独虚拟环境让人觉得很头大,不同的项目使用到的库版本不同要求我们为每一个项目创建其独一无二的环境.如果到现在你开发的项目都是基于 ...

最新文章

  1. C++C#外挂(内存修改)
  2. duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
  3. android的线程管理器,[Android开源]:一款安全、轻巧、简单的线程池管理器EasyThread...
  4. Android Studio 常见插件收藏
  5. 简单工厂之简单模型(uml)
  6. C++运算符重载 实现有理数(分数)的加减法
  7. Koding VM 配置nginx 小记
  8. 微信聊天机器人,不使用iChat,可以群聊
  9. Axure RP9如何实现点击文字图标变色?
  10. IntelliJ IDEA主题选择
  11. SCI论文写作--科研其实远没有那么难
  12. (BMVC-2021)GaitMask:基于掩码的步态识别模型
  13. TFS2010安装图解
  14. 实体映射最强工具类:MapStruct 真香!
  15. python规模大小的指标是_Python 做证券指数三种策略分析 - 最高收益,最大规模,最小风险...
  16. 阿尔弗雷德.爱因斯坦论莫扎特钢协
  17. core dump 是什么意思?
  18. 国内首部HTML5技术之拉米牌游戏项目实战(涉及智能AI+HTML5图形+HTML5事件模型+网络通讯)...
  19. Java开发实用工具
  20. MySQL 幻读和不可重复读的区别

热门文章

  1. 股票扫盲之内盘和外盘
  2. kmplayer加速播放视频(转)
  3. hivesql修改字段类型_Hive 数据类型 + Hive sql
  4. 两年半,netty高级面试题
  5. mysql 上午下午时间段_MySQL格式时间为小写的上午/下午?
  6. CI/CD轻量级可持续集成工具
  7. 命令行更新python的pip包 用pip或pycharm图形界面安装python外部库
  8. 关于yolov5安装时requirements系统显示ERROR相关解决办法
  9. 重新认识HTML(一)别来无恙
  10. 创新工场投资的移动互联网项目简评(下)