Java 扫描某包下所有类的注解并获得注解值

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 扫描某包下所有类的注解并获得注解值相关的知识,希望对你有一定的参考价值。

前言

  之前,设计的一个大型后台的多模块项目,没有按照模块化分库,每个模块的表都放在同一个模块里。公司现在的开发新项目有类似功能,都把之前的模块打成jar包引入新的项目代码中,但是你不熟悉这个模块都用到那些表,之前建表的时候,也没有按照模块名作为前缀去建表,导致迁移表的时间都浪费在 分辨那些表有用到上面。

  下面运用反射去扫描模块包下,数据库entity类的@tablename注解的值,可以快速打印出该模块引用的表有哪些,代码实现如下。

pom文件引入依赖

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

代码实现

    public static void main(String[] args) 
        // 要扫描的包
        String packageName = "org.springblade.system";
        //反射
        Reflections ref = new Reflections(packageName);
        // 获取扫描到的标记注解的集合
        Set<Class<?>> set = ref.getTypesAnnotatedWith(TableName.class);
        System.out.println("--------start-------------");
        for (Class<?> c : set) 
            // 循环获取标记的注解
            TableName annotation = c.getAnnotation(TableName.class);
            if(annotation!=null)
                // 打印注解中的内容
                System.out.println("表名:"+annotation.value());
            

        
        System.out.println("--------over-------------");
    

控制台输出

以上是关于Java 扫描某包下所有类的注解并获得注解值的主要内容,如果未能解决你的问题,请参考以下文章

@SpringBootApplication注解组成

访问注解(annotation)的几种常见方法

Spring IoC 源码分析 (基于注解) 之 包扫描

装配Bean

spring 2.5 扫描注入问题

java获取注解的值