applicationContextAware接口的setApplicationContext方法执行问题及未能获取Spring Bean

applicationContextAware接口的setApplicationContext方法执行问题及未能获取Spring Bean

💡 原文英文,约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打包工具和环境而异。
➡️

继续阅读