当前位置: 首页 > news >正文

国外做论坛网站网店推广平台

国外做论坛网站,网店推广平台,建站技术知识,备案平台新增网站📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

📢📢📢📣📣📣
哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
————————————————

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

今天集团将大家使用的三方包的版本进行了升级,其中涉及反射的Reflection的包,Reflections工具的时候(Jar包的版本是org.reflections:reflections:0.10.2),发现在IntelliJ IDEA中运行是能正常扫描出Class对象,但是部署在测试环境或者本地以Jar报运行时,扫描不出来,所以Debug了Reflections源码。

下面是创建Reflection对象的写法,这个在0.9.x版本的时候是没问题的,但是升级到0.10之后就有问题了,找了好半天才解决问题,这里记录一下解决问题的心得和过程,供大家参考。

 点进去最终会调用这个方法来初始化配置

public static ConfigurationBuilder build(Object... params) {final ConfigurationBuilder builder = new ConfigurationBuilder();// flattenList<Object> parameters = new ArrayList<>();for (Object param : params) {if (param.getClass().isArray()) { for (Object p : (Object[]) param) parameters.add(p); }else if (param instanceof Iterable) { for (Object p : (Iterable) param) parameters.add(p); }else parameters.add(param);}ClassLoader[] loaders = Stream.of(params).filter(p -> p instanceof ClassLoader).distinct().toArray(ClassLoader[]::new);if (loaders.length != 0) { builder.addClassLoaders(loaders); }FilterBuilder inputsFilter = new FilterBuilder();builder.filterInputsBy(inputsFilter);for (Object param : parameters) {if (param instanceof String && !((String) param).isEmpty()) {builder.forPackage((String) param, loaders);inputsFilter.includePackage((String) param);} else if (param instanceof Class && !Scanner.class.isAssignableFrom((Class) param)) {builder.addUrls(ClasspathHelper.forClass((Class) param, loaders));inputsFilter.includePackage(((Class) param).getPackage().getName());} else if (param instanceof URL) {builder.addUrls((URL) param);} else if (param instanceof Scanner) {builder.addScanners((Scanner) param);} else if (param instanceof Class && Scanner.class.isAssignableFrom((Class) param)) {try { builder.addScanners(((Class<Scanner>) param).getDeclaredConstructor().newInstance()); }catch (Exception e) { throw new RuntimeException(e); }} else if (param instanceof Predicate) {builder.filterInputsBy((Predicate<String>) param);} else throw new ReflectionsException("could not use param '" + param + "'");}if (builder.getUrls().isEmpty()) {// scan all classpath if no urls provided todo avoidbuilder.addUrls(ClasspathHelper.forClassLoader(loaders));}return builder;}

在For循环中第一个if,如果是String类型的参数,就会设置package,然后会设置filter,问题就出现在这里。这种简写方式,filter是和包名一样的。在本地IDEA中,所有文件都是在out目录下,文件的目录是正常包名开头,如下格式

com/jay/userinterface/authority/model/dto/ProductVO.class

但是如果是以Jar包运行的方式,因为SpringBoot 2.x版本打包时会做一些处理(加一些启动类),导致文件结构会发生变化(读者可以解压一个SpringBoot的Jar包看看实际结构)。这种情况下,获取文件的名称是如下格式

在扫描过程中,这些文件都过不了Filter的校验。

大致过程就是在Reflections类中scan()方法,对每个文件都会根据Filter过滤下,这个Filter就是一个正则表达式的匹配,表达式就是com/jay/userinterface/*,以Jar包方式运行的话,所有文件都会被过滤掉,扫描结果就为空。
 

解决方案

使用另外一种写法,自己构造ReflectionsConfiguration,手动设置Filter

Reflections reflections = new Reflections(new ConfigurationBuilder().forPackages(packageName).filterInputsBy(new FilterBuilder().includePackage("BOOT-INF.classes." + packageName)).setScanners(Scanners.MethodsAnnotated));

我这里面是直接加了前缀,每个文件在Jar包中的实际路径,和Springboot打包后文件格式有关,Springboot 1.x版本应该是不用改的。

也可以通过FilterBuilder的includePattern()方法来直接写正则表达式,兼容IDEA运行和Jar包运行的方式。

http://www.hengruixuexiao.com/news/6253.html

相关文章:

  • 石家庄建设局网站怎么打不开香水推广软文
  • 免费铺货诚招代理商seo引擎优化外包公司
  • 服务器怎么装网站吗网站建设方案
  • 昆明高端网站建设公司如何用html制作网页
  • wordpress 在线字体百度词条优化
  • 西宁哪里做网站百度广告推广收费标准
  • 淄博周村网站建设方案山西seo排名厂家
  • 电子商务网站建设作业总结seo技巧与技术
  • 网站建设案例方案哈尔滨网站制作软件
  • wordpress删除rss快速排名生客seo
  • wordpress授权代码站外seo推广
  • 东莞华商网络科技有限公司点金推广优化公司
  • 易班班级网站建设展示PPT制作链接的小程序
  • 电子商务有哪些职业抖音搜索seo
  • 企业网站建设定制seo搜索引擎招聘
  • 淘宝如何在其他网站做优惠搜索引擎排名谷歌
  • 栾城做网站seo推广软件排行榜
  • 怎么弄数据库备份做网站长沙网站设计拓谋网络
  • 广州做网站优化公司报价淘宝的17种免费推广方法
  • WordPress秀人网采集电子商务seo
  • 汽贸公司网站建设神马seo教程
  • 微信h5页面制作教程优化网络的软件
  • 做搜狗网站点击灰色关键词排名收录
  • 网站开发 方案怎样做网络销售平台
  • 烘焙食品网站建设需求分析合肥网站优化排名推广
  • 番禺建设银行网站网站设计模板网站
  • 网站开发实验室建设方案百度搜索工具
  • 青岛做商城网站百度购物平台客服电话
  • 展示型手机网站模板下载深圳百度推广客服电话多少
  • 年前做招聘网站话术seo技术交流论坛