JBoss EAP中jaxb_study应用两类为何由不同ModuleClassLoader加载?
问题解答
1. jdom2类的加载逻辑
在WildFly、JBoss这类Java EE容器中,应用的ModuleClassLoader(比如你的deployment.jaxb_study.war)会负责加载WEB-INF/lib下所有普通第三方依赖的类。org.jdom2属于非容器规范的第三方库,它的jar被打包进WAR的WEB-INF/lib目录,自然由应用自身的加载器加载,不会单独为它创建模块加载器——只有容器自带的、被模块化管理的规范API才有独立的模块加载器。
2. javax.transaction类被容器加载的原因
javax.transaction-api是Java EE规范定义的标准API,这类API通常会被容器以模块化方式内置提供。即便你在pom.xml中添加了该依赖,容器的类加载机制会优先使用自身内置的模块加载这些规范类,而非应用WEB-INF/lib里的jar。
这么做是为了保证规范API的版本一致性,避免应用引入的版本与容器兼容版本产生冲突,容器通过类加载优先级规则(容器模块加载器优先级高于应用加载器)实现这一逻辑。
3. 核心结论
- jdom2没有独立的模块加载器,它的类由应用的ModuleClassLoader加载,这是第三方库的正常加载逻辑。
- javax.transaction的类由容器模块加载器加载,是容器为保证规范一致性而采取的优先级加载策略。
内容的提问来源于stack exchange,提问作者ericj
相关产品推荐
相关产品推荐

