• 可用于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; }
  • 相关阅读:
    参数_门店
    实现百分比和百分比的累加以及A、B、C类别的标识
    参数范围的选择
    栏目数据合并表达式
    父子维度转化为组
    从参数中获得特定字符串
    多参与多轴
    数据库链接字符串大集合
    闰年2月29天
    sum函数按照类别的值进行取值
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/14245785.html
Copyright © 2020-2023  润新知