许久不更新博客了。最近在做项目时遇到了一个需要扫描某个包中的某个接口的实现类的需求,在网上搜了一下,发现了一些还不错的实现,但是有句话说得好:“不要重复发明轮子。”像这样的需求肯定是有很多现成的解决方案的。在github和stackoverflow上找了之后发现Reflections库可以完美地实现上述需求,现分享给大家。

Reflections库的依赖:

Gradle:

compile group: 'org.reflections', name: 'reflections', version: '0.9.11'

Maven:

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

使用起来非常简单:

@Test
        public void testReflections() {
            Reflections reflections = new Reflections("org.fhp.test.entity");
            Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
     
            for(Class clazz : classes) {
                //logger.info(clazz.getName());
                System.out.println("Found: " + clazz.getName());
            }
        }

假如想扫描整个工程的类,直接new一个不带参数的Reflections就好。值得一提的是,这东西在扫描的时候,连依赖的jar包都不放过。以Spring框架的BeanFactory为例:

import org.springframework.beans.factory.BeanFactory;

@Test
        public void testReflections() {
            Reflections reflections = new Reflections();
            Set<Class<? extends BeanFactory>> classes = reflections.getSubTypesOf(BeanFactory.class);
     
            for(Class clazz : classes) {
                //logger.info(clazz.getName());
                System.out.println("Found: " + clazz.getName());
            }
        }

另一个常用的场景是扫描包含指定注解的类。reflections对象中同样包含这一方法,代码如下:

import org.springframework.stereotype.Service;

@Test
        public void testReflections() {
            Reflections reflections = new Reflections();
            Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Service.class);
     
            for(Class clazz : classes) {
                //logger.info(clazz.getName());
                System.out.println("Found: " + clazz.getName());
            }
        }

Reflections还有很多类似的反射类操作(如扫描方法、扫描参数等),可以说是应有尽有了。有兴趣的小伙伴们可以参考Reflection库的源码或者官方文档,这里就不详述了。

参考地址:https://github.com/ronmamo/reflections
---------------------
作者:Jicky-17
来源:CSDN
原文:https://blog.csdn.net/u014527058/article/details/79035090
           https://blog.csdn.net/u014527058/article/details/79035090

巧用Reflections库实现包扫描(扫描某个包中某个接口实现、注解等)相关推荐

  1. 信息安全-Ping扫描与抓包分析

    实验目的 1.了解实验环境.实验规范 2.掌握Wireshark抓包工具的使用 3.分析ping命令数据包的交互过程,理解ICMP协议. 4.分析带参数的ping命令,通过抓包工具总结各参数的作用 实 ...

  2. Reflections一个强大的类扫描工具介绍

    目录 一.Reflections能够做什么 二.如何使用 2.1. 在maven项目中添加如下依赖 2.2.使用示例 2.2.1.实例化 2.2.2.根据父类获取所有子类 2.2.3.根据接口获取所有 ...

  3. spring ioc的包的扫描(基于注解)

    一.包扫描初始步骤源码分析 AnnotationConfigApplicationContext aac =new AnnotationConfigApplicationContext("c ...

  4. ClassPathBeanDefinitionScanner 扫描给定的包及其子包

    AnnotationConfigApplicationContext 通过调用类路径Bean 定义扫描器ClassPathBeanDefinitionScanner 扫描给定包及其子包下的所有类,主要 ...

  5. @ComponentScan配置扫描多个包

    我的Spring版本是5.2.6,使用@ComponentScan扫描多个包的注解配置: @Configuration @ComponentScan(basePackages = {"bea ...

  6. java 扫描jar包_java 扫描指定包(包括jar包)

    /*未经本人同意,禁止转载. 做工程时,有时候需要扫描指定包,或者指定jar包,甚至扫描指定包下指定类,本文章详细讲解如何扫描,以及智能扫描,小编讲的很详细了仔细看. 以下讲解, 包扫描和jar包扫描 ...

  7. spring component-scan配置扫描多个包

    2019独角兽企业重金招聘Python工程师标准>>> spring的component-scan扫描多个包: <context:component-scan base-pac ...

  8. 加密与解密 、 AIDE入侵检测系统 、 扫描与抓包案例

    Top NSD SECURITY DAY04 案例1:加密与解密应用 案例2:使用AIDE做入侵检测 案例3:扫描与抓包分析 1 案例1:加密与解密应用 1.1 问题 本案例要求采用gpg工具实现加/ ...

  9. 加密与解密 入侵检测 扫描与抓包

    Top NSD SECURITY DAY02 案例1:加密与解密应用 案例2:使用AIDE做入侵检测 案例3:扫描与抓包分析 1 案例1:加密与解密应用 1.1 问题 本案例要求采用gpg工具实现加/ ...

最新文章

  1. [Win]进程间通信——邮槽Mailslot
  2. 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
  3. python爬取抖音用户数据_python批量爬取下载抖音视频
  4. Oracle-知识结构漫谈
  5. SPOJ1812(后缀自动机求n个串的最长公共子串)
  6. pandas中如何选取某几列_【python】pandas中 loc amp; iloc用法及区别
  7. jupyter notebook python环境_jupyter Notebook环境搭建
  8. composer使用慢的解决办法
  9. Python-Django中的那些命令
  10. java考试知识点整理
  11. HTML5来了,7个混合式移动开发框架
  12. 晶圆检测显微镜是做什么研究才用到的?
  13. OpenCV读取海康4G摄像头
  14. Win11忘记本地账户密码了怎么移除或修改密码
  15. Pygame学习笔记 6 —— 3D游戏
  16. android 皮肤包换肤之Resources加载(一)
  17. SV学习(1)——数据类型
  18. 如何删除outlook中的重复邮件
  19. Flutter AnimatedSwitcher 实现的滑动切换数字动画效果
  20. ctrl c和 ctrl v 突然失灵不能使用的解决方法大全

热门文章

  1. 好书分享:《SEO实战密码》第3版
  2. wordpress空间上传新网站出现的问题
  3. PL\SQL过期处理注册表编辑器
  4. 软件测试|测试开发之路--UI 自动化常用设计模式
  5. 基于PaddlePaddle实现的EcapaTdnn声纹识别模型
  6. BIM技巧 | Revit绘制围栏12步骤
  7. 学习编程有那么难吗?
  8. 周年纪念日的自作视频
  9. windows下 conda创建虚拟环境
  10. 字、字节(byte)、比特(bit)的关系究竟是什么!