如果模块独立引入 SpringBoot 框架部分会怎样?

由于多模块运行时的逻辑在基座引入和加载,例如一些 Spring 的 Listener。如果模块启动使用完全自己的 SpringBoot,则会出现一些类的转换或赋值判断失败,例如:

CreateSpringFactoriesInstances

image.png

name = ‘com.alipay.sofa.ark.springboot.listener.ArkApplicationStartListener’, ClassUtils.forName 获取到的是从基座 ClassLoader 的类
image.png
而 type 是模块启动时加载的,也就是使用模块 BizClassLoader 加载。
image.png
此时这里做 isAssignable 判断,则会报错。

Cannot instantiate interface org.springframework.context.ApplicationListener : com.alipay.sofa.ark.springboot.listener.ArkApplicationStartListener

所以模块框架这部分需要委托给基座加载。




最后修改 October 26, 2023: add styles (6b806506)