美文网首页
Java获取类和类注释信息

Java获取类和类注释信息

作者: Rain_z | 来源:发表于2023-11-08 18:51 被阅读0次

    背景

    这几天需要整理下接口类名称和对应的类描述,如下图,需要取类名MyDemo 和@description的内容“测试Demo描述”,手动一个个整理显然不合适,写了一个Demo,代码比较粗糙,先说一下思路:

    1. 通过注解拿到想要的类(如果没有注解,通过扫描包下的类就可以了);
    2. 通过类的绝对路径读取类文件,找到描述文字取出(这里通过读文件方式是因为Java编译后,注释代码就没有了,只能通过读取源文件的方式);
    /**
     * @author: Rain
     * @date: 2023-11-09
     * @description: 测试代码
     */
    @Component
    public class MyDemo {
        
    }
    

    这里需要两个依赖

    <dependency>
                <groupId>org.reflections</groupId>
                <artifactId>reflections</artifactId>
                <version>0.9.11</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>22.0</version>
            </dependency>
    

    直接上代码

    /**
     * @author: Rain
     * @date: 2023-11-09
     * @description: 测试代码
     */
    public class MyDemo {
    
        public static void main(String[] args) {
            // 扫描指定的包
            scanAnnotations("com.rain.demo");
        }
    
        private static void scanAnnotations(String pathStr) {
            Reflections reflections = new Reflections(pathStr);
            Set<Class<?>> annotatedClasses = reflections.getTypesAnnotatedWith(Component.class);
            for (Class<?> annotatedClass : annotatedClasses) {
                String desc = "";
                String simpleName = annotatedClass.getSimpleName();
                String name = annotatedClass.getPackage().getName();
                String fileName = "D://code/Demo/src/main/java/" + name.replace(".", "/") + "/"+ simpleName + ".java";
                desc = getDesc(fileName);
                //这里可以加点逻辑处理下desc数据,根据自己需要,然后把不要的*或者@符号这些删除就可以了
                System.out.println(annotatedClass.getSimpleName() + " , " + desc);
            }
    
        }
    
        private static String getDesc(String fileName) {
            try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"))) {
                String line;
                while ((line = br.readLine()) != null) {
                    if (line.contains("@Description") || line.contains("@description")) {
                        return line;
                    }
                    //这里是为了保证类注释不是标准的@description,而是直接文字描述也能正常取出
                    if (line.contains("*") && !line.contains("@") && !line.contains("/*") && !line.contains(".*")) {
                        return line;
                    }
                }
            } catch (Exception e) {
                return "无描述";
            }
            return "无描述";
        }
    }
    

    相关文章

      网友评论

          本文标题:Java获取类和类注释信息

          本文链接:https://www.haomeiwen.com/subject/horljdtx.html