`
wangzl2222
  • 浏览: 152686 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

找到指定包名下的所有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;
    }
}

分享到:
评论

相关推荐

    android调用第三方程序,需要包名、类名

    当我们需要调用一个不在我们应用范围内的程序时,我们需要知道目标应用的包名(Package Name)和主类名(Activity Class Name)。下面将详细介绍如何进行操作。 1. **理解包名(Package Name)** 包名是Android...

    手工jar打包

    - `packageName/*.class`:指定要打包的.class文件路径,这里我们指定的是包名下的所有.class文件。 这样,我们就创建了一个可执行的JAR文件。当你双击这个JAR文件时,Java虚拟机会根据`MANIFEST.MF`中的`Main-...

    WEB中Applet找不到class的问题

    这里的`codebase`属性指定了项目的根目录以及`applet`子目录,这样浏览器就能找到包内的`AppletUse.class`。 另外,还有两种常见的解决方案: - **例1**:使用绝对路径,将`codebase`设置为项目名下的`appletclass...

    如何使用jQuery

    例如,`$("#id")` 用于选取 ID 为 "id" 的元素,`$(".class")` 用于选取所有 class 为 "class" 的元素。 2. **DOM 操作**: jQuery 提供了简便的方法来操作 DOM 元素,包括添加、删除、修改元素属性等。例如,`$("p...

    笔试试题-J2EE开发技术

    这是因为Struts配置文件通常会引用包名下的资源文件而不需要包含`.properties`扩展名。 ##### 7. 在Struts1.2中,StrutsModule是在什么地方配置的? - **答案**:【B】在struts-config.xml中 - **解析**:在Struts...

    ctihb.github.io

    1. **选择器**:如类选择器(.class)、ID选择器(#id)、元素选择器(tag name)等,用于指定要应用样式的元素。 2. **属性**:如color、font-size、background-color等,定义元素的样式。 3. **盒模型**:理解...

Global site tag (gtag.js) - Google Analytics