在运行时从文件夹或 JAR 中发现类
设想一个 Java 工具,它可以深入研究 Java 应用程序的结构,提取有意义的见解。为此,该工具必须扫描指定源(JAR/WAR 或文件夹)中的 .class 文件。然后它使用反射来检查类方法及其属性。然而,这项任务已被证明难以实现。
存在许多基于 URLClassloader 的解决方案,允许从目录或档案加载特定类。然而,似乎没有人能够在不事先了解类名称或包结构的情况下识别和加载类。
解决问题的症结
经过仔细检查,挑战不在于通过递归扫描技术获取所有类文件,而在于为每个发现的类文件获取Class对象
利用 JarFile 和 URLClassLoader 的强大功能
提供的代码有效地利用 Java NIO 从 JAR 文件加载所有类,而无需事先了解它们的存在。该过程涉及:
考虑替代方案:Javassist
根据评论者的建议,Javassist 提供了另一个可行的选择。通过在循环之前初始化 ClassPool,您可以创建 CtClass 对象来代替使用类加载器加载类。 CtClass 对象提供对一系列类属性的访问,包括方法、字段、嵌套类等。
这个全面的解决方案使开发人员能够在运行时动态加载和检查类,为复杂的代码分析和操作工具。
以上是如何在运行时从 JAR 或文件夹动态发现和检查 Java 类?的详细内容。更多信息请关注PHP中文网其他相关文章!