JAVA获取同一路径下所有子类或接口实现类
2016-05-04 17:32
691 查看
package zmx.util; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import zmx.spring.aop.test.IHelloWorldService; public class ClassUtil { /** * 获取同一路径下所有子类或接口实现类 * * @param intf * @return * @throws IOException * @throws ClassNotFoundException */ public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException, ClassNotFoundException { List<Class<?>> classes = new ArrayList<Class<?>>(); for (Class<?> c : getClasses(cls)) { if (cls.isAssignableFrom(c) && !cls.equals(c)) { classes.add(c); } } return classes; } /** * 取得当前类路径下的所有类 * * @param cls * @return * @throws IOException * @throws ClassNotFoundException */ public static List<Class<?>> getClasses(Class<?> cls) throws IOException, ClassNotFoundException { String pk = cls.getPackage().getName(); String path = pk.replace('.', '/'); ClassLoader classloader = Thread.currentThread().getContextClassLoader(); URL url = classloader.getResource(path); return getClasses(new File(url.getFile()), pk); } /** * 迭代查找类 * @param dir * @param pk * @return * @throws ClassNotFoundException */ private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException { List<Class<?>> classes = new ArrayList<Class<?>>(); if (!dir.exists()) { return classes; } for (File f : dir.listFiles()) { if (f.isDirectory()) { classes.addAll(getClasses(f, pk + "." + f.getName())); } String name = f.getName(); if (name.endsWith(".class")) { classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6))); } } return classes; } public static void main(String[] args) { try { System.out.println("获取所有子类和实现类:"); for (Class<?> c : getAllAssignedClass(IHelloWorldService.class)) { System.out.println(c.getName()); } System.out.println("获取所有类:"); for (Class<?> c : getClasses(IHelloWorldService.class)) { System.out.println(c.getName()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
输出:
获取所有子类和实现类:
zmx.spring.aop.test.HelloWorldService
获取所有类:
zmx.spring.aop.test.HelloWorldAspect
zmx.spring.aop.test.HelloWorldService
zmx.spring.aop.test.IHelloWorldService
zmx.spring.aop.test.LoggerAspect
zmx.spring.aop.test.MainTest
相关文章推荐
- 为什么JAVA中的属性不能覆盖而方法却可以覆盖
- jmeter 打不开 提示“Not able to find Java executable or version”的解决办法
- (转载)JavaWeb学习总结(五十一)——邮件的发送与接收原理
- Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
- 4、Java的继承
- Java加密技术(十一)——双向认证
- Java中集合框架辅助类Iteratror、Collections、Arrays
- java中的移位运算符与正负数转换
- Java内存优化和性能优化的几点建议
- Java 容器(一) Arrays
- 79、Java 两个整数相除保留两位小数,将小数转化为百分数
- java基础学习总结——this关键字
- spring mvc获取和返回
- java基础学习总结——哈希编码
- Java加密技术(十)——单向认证
- java基础学习总结——方法的重载(overload)
- Java加密技术(九)——初探SSL
- Java制作证书的工具keytool用法总结
- Java 设计模式 - 桥接模式
- 使用Java实现希尔排序算法的简单示例