@SuppressWarnings("rawtypes") public static List<Class> listByClass(String package) { try { List<Class> clzs = new ArrayList<Class>(); String packagePath = package.replace(".", "/"); URL url = Thread.currentThread().getContextClassLoader().getResource(packagePath); File file = new File(url.getPath()); if(!file.exists()) throw new SysException("初始化的包名路径不正确"); File []fs = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if(pathname.getName().endsWith(".class")) return true; return false; } }); for(File f:fs) { String cname = p+"."+FilenameUtils.getBaseName(f.getName()); Class clz = Class.forName(cname); clzs.add(clz); } return clzs; } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static List<Class> listByClassAnnotation(String package,Class an) { try { List<Class> clzs = new ArrayList<Class>(); String packagePath = package.replace(".", "/"); URL url = Thread.currentThread().getContextClassLoader().getResource(packagePath); File file = new File(url.getPath()); if(!file.exists()) throw new SysException("初始化的包名路径不正确"); File []fs = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if(pathname.getName().endsWith(".class")) return true; return false; } }); for(File f:fs) { String cname = p+"."+FilenameUtils.getBaseName(f.getName()); Class clz = Class.forName(cname); if(clz.isAnnotationPresent(an)) clzs.add(clz); } return clzs; } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; }
原文:http://yaomy.blog.51cto.com/8892139/1743040