`
wangzl2222
  • 浏览: 150992 次
  • 性别: 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;
    }
}

分享到:
评论

相关推荐

    pkg-scanner:Java包扫描器, 扫描出指定包下所有的类名

    扫描出指定包下所有的类名。 Quick Start 指定包名: PkgScanner scanner = new PkgScanner("cn.fh.pkgscanner"); List&lt;String&gt; list = scanner.scan(); list.forEach( f -&gt; System.out.println(f)); 输出结果: ...

    Java 工具类 包含一些常用的方法

    4.为指定包名下的所有java文件添加toString方法代码 5.将文件转换为指定字符编码集的字符串 6.获取指定类的随机实例(传入Class模板) 7.根据指定包名搜索文件 如需使用如上方法,需要将JavaUtil复制到项目中...

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

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

    手工jar打包

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

    zabr完美扫描高仿微信高灵敏度远距离也可识别完美兼容手机使用时移植到其它工程时要注意新建一个包名为com.zbar.lib将所有类保存到这个包名下因为libzbar.so文件里面只会识别这个包名.rar

    zabr完美扫描高仿微信高灵敏度远距离也可识别完美兼容手机使用时移植到其它工程时要注意新建一个包名为com.zbar.lib将所有类保存到这个包名下因为libzbar.so文件里面只会识别这个包名.rar,太多无法一一验证是否可用...

    WEB中Applet找不到class的问题

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

    android 通过应用包名打开应用

    总结来说,通过应用包名在Android中打开应用,主要步骤包括创建一个带有`ACTION_MAIN`和`CATEGORY_LAUNCHER`的`Intent`,设置`ComponentName`以指定目标应用及其主活动,然后检查并启动`Intent`。这个过程不仅展示了...

    sql server2005&2008删除某个架构名下的所有表或数据

    你可以使用以下动态SQL语句来遍历并删除指定架构下的所有表: ```sql DECLARE @SchemaName NVARCHAR(128) = '你的架构名'; -- 替换为实际的架构名 DECLARE @Sql NVARCHAR(MAX); SELECT @Sql = STRING_AGG(N'...

    Android代码-DynamicLog

    // 注入所有red.dim.dynamiclog 包名下的class packageList "red.dim.dynamiclog" // 不注入 red.dim.dynamiclog.App class blackPackageList "red.dim.dynamiclog.App" } Api: packageList 注入的包名 ...

    android activity,java打包架包混淆经验.docx

    同一包名下的类,如果没有被其他包引用,混淆后它们内部的方法会自动变为private。如果需要保持某些方法为public,需要显式指定。 总结,使用ProGuard进行打包混淆时,要关注关键类、方法的保护,第三方库的处理,...

    IOS和安卓自定义包名分享

    4. 测试分享功能,确保在自定义包名下能够正常工作。 在实际开发中,还需要注意一些额外的事项: - 自定义包名后,如果需要发布更新,记得保持新旧版本包名的一致性,否则可能导致用户无法接收到更新通知。 - 对于...

    取配置文件节名称下所有项名称

    要获取一个节下的所有项名称,首先需要解析配置文件,定位到指定的节。这可以通过编程语言中的库或模块实现,如Python的`configparser`模块处理INI文件,`xml.etree.ElementTree`处理XML文件。遍历该节下的所有子...

    jar包的性能测试(LR)

    接口返回的信息列表中包含了用户名下的所有车辆信息。 - **接口名**:`getCarInfo` - **发起方**:未指定 - **接收方**:未指定 - **方式**:`HttpInvoker` - **请求对象的参数说明** - **`userName`**:...

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    - 【Java常用几种加密算法】在[com.gradle.java.encryption](/tree/master/src/main/java/com/gradle/java/encryption)包名下 ;[加密算法测试](/tree/master/src/main/java/com/gradle/java/test) - 【Rxjava的学习...

    最新房产登记在子女名下能分割吗房产登记在子女名下是否能分割DOC新版文档.docx

    本文主要讨论的是房产登记在子女或“小三”名下时,在特定情况下的财产分割问题。 首先,关于房产登记在未成年子女名下,根据《中华人民共和国民法典》(以下简称《民法典》)的规定,父母将房产登记在子女名下,...

    python 自动移动文件到对应匹配的文件名下

    2. **遍历文件**:使用`os.listdir()`或`glob.glob()`函数可以列出指定目录下的所有文件和子目录。然后,通过循环遍历这些文件,逐一进行处理。 3. **文件名匹配**:可能使用正则表达式(`re`模块)或者简单的字符...

    提取文件夹名下文件名称并列表

    提取文件夹名下文件名称并列表的程序

    3企业名下房产抵押个人商务贷款.pptx

    【企业名下房产抵押个人商务贷款】是一种针对自然人的信贷业务,主要特点是借款人以其拥有或控制的企业名下的房产作为抵押,获取个人商务贷款。这种贷款形式适用于特定类型的借款人,包括但不限于有限责任公司、合伙...

    J2ME JSON 包

    在压缩包子文件的文件名称列表中只有一个“org”,这通常意味着压缩包中包含的是Java源代码或者编译后的字节码,它们被组织在“org”这个包名下。在Java中,包是命名空间的一种形式,用于避免类名冲突。在实际的开发...

    Android截图

    在github上看到一个可以实现截图功能的demo,,,(资源分不知道为什么不能设成0,所以就选择了最小...把ScreentShotUtil.class和ShellUtils.class复制到src/包名下即可; 需要在哪里实现截图就在哪里调用getScreen()。

Global site tag (gtag.js) - Google Analytics