用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

扫描特定包目录下的class

2014-06-30 作者: 路易斯陈凯瑞举报

[java]代码库

package class_scanner;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

/**
 * <p>
 * 扫描特定目录下面的class文件,参考spring的component scan实现
 * 可以支持普通文件(tomcat),jar包和<b>VFS(jboss)</b>
 * </p>
 * @Required spring-core-3.2.3
 * @author luis.chen
 * @version $Id: ClassScanner.java, v 0.1 2014年6月30日 下午2:53:29 luis.chen Exp $
 */
public class ClassScanner {

    /**
     * 通过包名定位下面所有的class文件      
     * @param packageName 包名格式com.xxx.yyy
     * @throws IOException 
     * @throws ClassNotFoundException 
     * */
    public static Set<Class<?>> loadClassByPackage(String packageName) throws IOException, ClassNotFoundException{
        Set<Class<?>> clzSet = new HashSet<Class<?>>();
        //定义资源格式为class后缀
        String resourcePattern = "**/*.class";
        //用于搜索的完整路径
        //格式为 classpath*:aaa/bbb/cc/**/*.class
        String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
                packageName.replaceAll("\\.", "/") + "/" + resourcePattern;
        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
        for (Resource resource : resources) {
            //去掉.class 获得真正的类名
            String className = resource.getFilename().substring(0, resource.getFilename().length() - 6);
            clzSet.add(Class.forName(packageName+"."+className));
        }
        return clzSet;
    }
    
    public static void main(String args[]){
        String pkgName = "bean_mapping";
        try {
            Set<Class<?>> clzSet = ClassScanner.loadClassByPackage(pkgName);
            for(Class<?> clz: clzSet){
                System.out.println(clz.getName());
                //输出如下
                /*
                bean_mapping.Name2
                bean_mapping.TestBeanMapping
                bean_mapping.Name
                bean_mapping.SrcObjectMapper
                bean_mapping.DescObj
                bean_mapping.SourceObj
                */
                
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...