zoukankan      html  css  js  c++  java
  • 可用于springboot的jar的扫描特定包的所有类的方法

    之前有遇到过本地测试跑的通的代码,上到线上就失败的情况,当时是一个文件处理的操作。

    后面才发现spring boot打的jar包,和直接本地用IDEA运行的代码多多少少还是有区别的,再一个就是windonws和linux系统,也多多少少有点不同。

    这回写了扫描包代码,然后用jar测试了下,

    下面是两个获取某个包下所有有特定注解类的代码,都是网上copy的

    /**
    * 不可用于jar
    */
    public
    List<Class<?>> a() { List<Class<?>> classList = new ArrayList<>(); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); MetadataReaderFactory metaReader = new CachingMetadataReaderFactory(); try { Resource[] resources = resolver.getResources("classpath*:com/bzua/jingdata/service/**/*.class"); ClassLoader loader = ClassLoader.getSystemClassLoader(); for (Resource resource : resources) { MetadataReader reader = metaReader.getMetadataReader(resource); String className = reader.getClassMetadata().getClassName(); Class<?> clazz = loader.loadClass(className); if (clazz.isAnnotationPresent(Report.class)) { classList.add(clazz); } } } catch (ClassNotFoundException | IOException e) { log.error("错误信息: ", e); } return classList; }
      /**
      * 可用于jar
      */
    public List<Class<?>> b() { List<Class<?>> classList = new ArrayList<>(); ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); final String BASE_PACKAGE = "com.bzua.jingdata.service"; final String RESOURCE_PATTERN = "/**/*.class"; try { String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + RESOURCE_PATTERN; Resource[] resources = resourcePatternResolver.getResources(pattern); //MetadataReader 的工厂类 MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver); for (Resource resource : resources) { //用于读取类信息 MetadataReader reader = readerfactory.getMetadataReader(resource); //扫描到的class String classname = reader.getClassMetadata().getClassName(); Class<?> clazz = Class.forName(classname); //判断是否有指定主解 if (clazz.isAnnotationPresent(Report.class)) { classList.add(clazz); } } } catch (IOException | ClassNotFoundException e) { } return classList; }
  • 相关阅读:
    使用python实现深度神经网络 1(转)
    OHDSI——数据标准化
    TensorFlow相关
    语言模型和共现矩阵(转)
    cd4与cd8比值的意义
    python之使用set对列表去重,并保持列表原来顺序(转)
    Python 汉字转拼音
    Hadoop的启动和停止说明
    Scikit-learn 概述
    病历智能分析系统的研究与实现(转)
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/14245785.html
Copyright © 2011-2022 走看看