💡
原文英文,约600词,阅读约需3分钟。
📝
内容提要
本文讨论了生产环境中的NPE问题,原因是Api和ApplicationContextProvider类的加载顺序不同,导致ApplicationContext未初始化。解决方案是使用懒加载或控制加载顺序的注解。
🎯
关键要点
- 生产环境中出现NPE问题,原因是Api和ApplicationContextProvider类的加载顺序不同。
- ApplicationContext未初始化,导致服务类无法加载。
- Customize项目依赖Spring管理API和服务,通过自动扫描加载ApiEnhancer和ServiceEnhancer类。
- 调试发现ApplicationContext在加载时为null,setApplicationContext方法未执行。
- ApplicationContextProvider类的静态方法在初始化阶段加载,API在ApplicationContextProvider分配内存之前创建。
- Spring扫描加载类时没有特定顺序,可能导致Api在ApplicationContextProvider之前创建。
- 解决方案是使用懒加载或控制加载顺序的注解,如@DependsOn、@Order、@Priority。
- 生产环境和测试环境的创建顺序不同,可能与Spring的扫描过程有关。
- JAR包本身没有顺序,实际遍历顺序可能因不同的JAR打包工具和环境而异。
➡️