在上一篇博文中,一般是可以解決過濾器注入bean的空指針問題的,但我們跑在服務器上的Spring Boot程序一般是使用外置tomcat來啟動的,
1 public static void main(String[] args) throws InterruptedException { 2 ApplicationContext context = SpringApplication.run(Application.class, args); 3 SpringContextUtil.setApplicationContext(context); 4 }
這與我們在ide上直接run Application.java是不一樣的,也會發生空指針異常,因為直接啟動tomcat的方式上面的第三行沒有執行,context注入失敗。因此我們需要換一種Spring context的注入方式
1 @Component 2 public class SpringContextUtil implements ApplicationContextAware { 3 private static ApplicationContext applicationContext; 4 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 5 SpringContextUtil.applicationContext = applicationContext; 6 } 7 public static ApplicationContext getApplicationContext() { 8 return applicationContext; 9 } 10 11 //通過名字獲取上下文中的bean 12 public static Object getBean(String name){ 13 return applicationContext.getBean(name); 14 } 15 16 //通過類型獲取上下文中的bean 17 public static Object getBean(Class<?> requiredType){ 18 return applicationContext.getBean(requiredType); 19 } 20 }
就可以正常使用Bean組件了,經驗證 問題得以解決