在 public class CspServletInitializer extends SpringBootServletInitializer 中的代码 String csspDefault = configService.selectConfigByKey('sys:cssp:default'); 可能会出现空指针异常,这是因为 configService 可能未成功注入。以下是一些可行的解决方法:

  1. 确保 ISysConfigService 的实现类已经被正确注入到 Spring 容器中。 可以尝试以下几种方式:

    • 在实现类上添加 @Service 注解,例如:
    @Service
    public class SysConfigServiceImpl implements ISysConfigService {
        // 实现方法
    }
    
    • 在配置类中使用 @ComponentScan 注解扫描到该实现类,例如:
    @Configuration
    @ComponentScan('com.example.config') // 扫描 com.example.config 包下的类
    public class AppConfig {
        // 其他配置
    }
    
  2. 如果 configService 是一个接口,可以尝试通过 @Autowired 注解注入其实现类,而不是接口本身。 例如,如果有一个实现类叫做 SysConfigServiceImpl,可以使用 @Autowired 注解注入 SysConfigServiceImpl 而不是 ISysConfigService:

    @Autowired
    private SysConfigServiceImpl configService;
    
  3. 确保 configService 的注入顺序正确,即 CspServletInitializer 类在 ISysConfigService 实例化之后才被调用。 可以尝试以下几种方式:

    • 调整 @ComponentScan 注解的扫描顺序,将 ISysConfigService 的实现类放在更早的位置进行扫描。
    • 在配置类中使用 @DependsOn 注解显式指定实例化顺序,例如:
    @Configuration
    public class AppConfig {
        @Bean
        @DependsOn('sysConfigServiceImpl') // 依赖 sysConfigServiceImpl 实例
        public CspServletInitializer cspServletInitializer() {
            return new CspServletInitializer();
        }
    }
    
  4. 如果以上方法都没有解决问题,可以尝试在 CspServletInitializer 类中手动实例化 configService,而不使用 @Autowired 注解注入。 可以使用 new 关键字创建一个实例,并手动调用相关的初始化方法:

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        // 手动实例化 configService
        ISysConfigService configService = new SysConfigServiceImpl();
        // 其他代码
        return application.sources(CspApplication.class);
    }
    

如果以上方法都无法解决问题,请提供更多代码和异常信息,以便更准确地帮助你解决问题。

SpringBootServletInitializer 中空指针异常的解决方法

原文地址: https://www.cveoy.top/t/topic/lntg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录