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

简述建设网站的一般过程制作相册

简述建设网站的一般过程,制作相册,天津工程建设协会网站,一个企业可以做多个网站吗出现问题: 原因:导入第三方sdk 解决思路:刷新maven,清理,排除依赖 在排除掉可能的依赖后发现还是不行,分析依赖关系,打开idea自带的maven树查看工具: 通过maven依赖图谱我们发现&…

出现问题:

原因:导入第三方sdk

解决思路:刷新maven,清理,排除依赖

在排除掉可能的依赖后发现还是不行,分析依赖关系,打开idea自带的maven树查看工具:

通过maven依赖图谱我们发现,所有的日志依赖都来源于spring-boot-starter,这也是Springboot的祖宗依赖,并且,该sdk是一整个完整的SpringBoot工程,而不是常见的模块式。

直接排他祖宗:

问题解决,分析出现原因:

根本原因:jvm的类加载机制

问题产生过程:两个项目的依赖版本不同,假设我们项目是:

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.10</version>
</dependency>

引入的第三方sdk中的依赖是:

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>

Spring Boot 启动时,类加载器的行为如下:

步骤 1:类加载器扫描 classpath

Spring Boot 启动时,ApplicationClassLoader 负责扫描 classpath 下的 JAR 文件,发现:

  • logback-classic-1.2.10.jar(来自我们的项目依赖)

  • logback-classic-1.2.3.jar(来自 SDK)

Java 规定 同一个类(全限定名相同),只能被一个类加载器加载一次,否则会导致冲突。

步骤 2:类加载器加载 SLF4J

SLF4J 主要涉及以下类:

  • org.slf4j.LoggerFactory (SLF4J 的核心类)

  • org.slf4j.impl.StaticLoggerBinder(绑定具体日志实现)

Spring Boot 在初始化日志时,会执行:

Logger logger = LoggerFactory.getLogger(MyApp.class);

这时,类加载器会加载 org.slf4j.impl.StaticLoggerBinder 类,而这个类分别存在于:

  • logback-classic-1.2.10.jar

  • logback-classic-1.2.3.jar

假设 ApplicationClassLoader 先加载 logback-classic-1.2.3.jar,这时 JVM 缓存了老版本,但你的 logback-classic-1.2.10.jar 中的方法签名可能发生了变化。


3. 发生 AbstractMethodError 的原因

由于 logback-classic-1.2.3.jar较早的版本,它可能没有某些方法,比如:

// 1.2.3 版本的方法
public boolean supportsSourceType(Class<?> sourceType) { return true; }
​
// 1.2.10 版本方法(升级后可能有不同签名)
public boolean supportsSourceType(Class<?> sourceType, boolean flag) { return true; }

然后 Spring Boot 依赖的是 logback-classic-1.2.10.jar 版本的方法:

listenerAdapter.supportsSourceType(someClass);

但由于 logback-classic-1.2.3.jar 已经被类加载器加载,JVM 仍然调用的是老版本的方法,而 logback-classic-1.2.3.jar 里没有这个方法,就会发生 AbstractMethodError

Exception in thread "main" java.lang.AbstractMethodErrorat org.springframework.context.event.GenericApplicationListenerAdapter.supportsSourceType

总结:

  1. 类加载器只能加载一个类的一个版本,如果 logback-classic-1.2.3.jar 先被加载,Spring Boot 调用新版本的方法就会失败。

  2. 方法签名变化导致 AbstractMethodError,因为类加载器仍然引用的是旧的 logback-classic-1.2.3.jar 版本,而新代码需要 1.2.10 的方法。

  3. 该SDK是完整的SpringBoot工程,而不是模块,模块化 SDK 可以通过适当的 类加载器管理、依赖管理、版本对齐 等方式,确保它的日志框架不会影响到 Spring Boot 项目的日志实现

http://www.dtcms.com/wzjs/587217.html

相关文章:

  • 企业做网站要多少钱做一个团购网站的成本
  • 图片 移动网站开发品牌营销是什么工作
  • ucenter 整合两个数据库网站怎么搭建视频网站
  • 网站下载的文件在哪里婚恋网站排名前三
  • 做外贸的阿里巴巴网站是哪个更好福州网站seo
  • 新建的网站需要维护吗广州app网站开发
  • 果业局网站建设电脑怎么做软件开发
  • 黄村网站开发公司嵌入式软件开发兼职
  • 湖北建设网站信息查询中心软件定制开发网站建设
  • 企业年报查询网站丹阳市房产信息网
  • 餐饮公司最好的网站建设做类似淘宝的网站需多少资金
  • 做网站推销好做吗wordpress小小工具
  • 做业务需要知道哪些网站安阳县妇幼保健院
  • 网站如何做伪静态页面小型教育网站开发与设计
  • 温州捷创网站建设宜良县建设局网站
  • 网站在建设中页面安阳网站建设报价
  • 汕头免费模板建站游戏公司官方网站模版
  • 怎么关闭自己公司网站网站建设的基本要求
  • 网站批量发布重庆网络公司做什么生意好
  • 响应式网站项目大宗商品一览表
  • 做网站和做程序一样吗上海短视频seo优化网站
  • 用路由器做网站网络推广培训机构
  • 有做敦煌网站的吗微信公众号编辑教程
  • 网站建设的途径山东做网站建设的好公司哪家好
  • 怎么做网站黑链中企动力企业
  • 网站霸屏怎么做建设英文网站的申请怎么写
  • 重庆网站seo外包网站后台不能上传
  • 网站建设 m.ykn.ccwordpress 重新安装
  • 做网站需要知道什么软件煎蛋wordpress二次开发
  • 湖南省建设工程造价管理总站网站利用ps制作网站的设计