天天看点

遍历指定包名下所有的类(支持jar)(转)

支持包名下的子包名遍历,并使用Annotation(内注)来过滤一些不必要的内部类,提高命中精度。

通过Thread.currentThread().getContextClassLoader()获取ClassLoader实例

将包名转为路径名后,做为参数传给CloassLoader.getResources(),以得到该路径下所有资源的URL;

通过URL.getProtocol()方法,判断资源是在本地(file:)或是第三方jar包(jar:)内;

在本地的类直接文件遍历即可;

第三方jar则通过URL.openConnection()得到JarURLConnection,再通过JarURLConnection.getJarFile()获得JarFile,最后遍历该JarFile的item即可。