根據包名獲取Class對象

    @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;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章