标签:
package org.konghao.sys.kit; import java.io.File; import java.io.FileFilter; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.FilenameUtils; import org.konghao.sys.org.model.SysException; public class BasicSysKit { /** * 把(22)(33)(55)取出形成List * @param str * @return */ public static List<Integer> braceStr2List(String str) { Pattern pattern = Pattern.compile("(\\d+)"); Matcher m = pattern.matcher(str); List<Integer> list = new ArrayList<Integer>(); while(m.find()) { list.add(Integer.parseInt(m.group())); } return list; } /** * 判断对象是否为空 * @param obj * @return */ @SuppressWarnings("rawtypes") public static boolean isEmpty(Object obj) { if(obj==null) return true; if(obj instanceof String) { if("".equals(obj)) return true; } if(obj instanceof Collection<?>) { if(((Collection) obj).size()>0) return true; } return false; } /** * 对两个list做合并 * @param baseList * @param mergeList */ public static <N extends Object>void mergeList(List<N> baseList,List<N> mergeList) { for(N o:mergeList) { if(!baseList.contains(o)) { baseList.add(o); } } } /** * load包名下的所有class * @param p * @return */ @SuppressWarnings("rawtypes") public static List<Class> listByClass(String p) { try { List<Class> clzs = new ArrayList<Class>(); String packagePath = p.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; } /** * load指定包名下的含有指定annotation类型的类 * @param p * @param an * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static List<Class> listByClassAnnotation(String p,Class an) { try { List<Class> clzs = new ArrayList<Class>(); String packagePath = p.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; } }
加载指定包名下的全部类以及指定annotation进行过滤的工具类
标签:
原文地址:http://my.oschina.net/u/2391658/blog/489743