自定義項目啟動初始化信息的listener報錯
阿新 • • 發佈:2018-07-29
servle eve 如果 cep lis private 定義 順序 web.xml
自定義初始化組件代碼如下:
@Component public class InitComponent implements ServletContextListener, ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext sc = servletContextEvent.getServletContext();//設置博主信息 BloggerService bloggerService = (BloggerService) applicationContext.getBean("bloggerService"); //錯誤處 Blogger blogger = bloggerService.getBlogger(); blogger.setPassword(null); sc.setAttribute("blogger", blogger); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } @Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
寫這段代碼並且將其配在web.xml的listener中,用意在於項目啟動的時候通過監聽就初始化一些信息,
但是每次啟動錯誤處就會報NullPoint異常,經過排查才知道:
Spring在項目啟動時掃描註解配置的Bean是有順序的,具體順序是ApplicationContext.xml的順序,
問題就出在這,當掃描到這個類時如果BloggerService還沒有被掃描到,就自然會報錯了。
自定義項目啟動初始化信息的listener報錯