首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

找到指定包名上的所有class

2012-10-14 
找到指定包名下的所有classpackage test import java.io.IOExceptionimport java.util.LinkedHashSetim

找到指定包名下的所有class

package test;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;

public class FindTargetPackageClass {
??? private static Log logger = LogFactory.getLog(FindTargetPackageClass.class);
??? protected static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";

??? private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

??? private MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(
??????????? this.resourcePatternResolver);

??? private String resourcePattern = DEFAULT_RESOURCE_PATTERN;

??? public static void main(String[] args) throws Exception {
??????? FindTargetPackageClass test = new FindTargetPackageClass();
??????? System.out.println(test.findTargetClassNames("org.springframework.context.event"));
??? }
??? public Set<String> findTargetClassNames(String basePackage) {
??????? Set<String> candidates = new LinkedHashSet<String>();
??????? try {
??????????? String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
??????????????????? + ClassUtils.convertClassNameToResourcePath(basePackage)
??????????????????? + "/" + this.resourcePattern;
??????????? Resource[] resources = this.resourcePatternResolver
??????????????????? .getResources(packageSearchPath);
??????????? for (int i = 0; i < resources.length; i++) {
??????????????? Resource resource = resources[i];
??????????????? MetadataReader metadataReader = this.metadataReaderFactory
??????????????????????? .getMetadataReader(resource);
??????????????? String clazzName = metadataReader.getClassMetadata().getClassName();
??????????????? candidates
??????????????????????? .add(clazzName);
??????????????? logger.debug("Find Class " + clazzName);
??????????? }
??????? } catch (IOException ex) {
??????????? throw new BeanDefinitionStoreException(
??????????????????? "I/O failure during classpath scanning", ex);
??????? }
??????? return candidates;
??? }
}

热点排行