在控制器使用@Autowired進(jìn)行自動(dòng)注入的時(shí)候我沒有發(fā)現(xiàn)過(guò)這個(gè)問(wèn)題,但是今天想做一個(gè)自動(dòng)登錄的過(guò)濾器的時(shí)候,控制臺(tái)報(bào)了錯(cuò)。原因是NULLPOINTEREXCEPTION異常,也就是空指針異常。于是我就debug了一下,發(fā)現(xiàn)這里的dao對(duì)象是空的,后來(lái)試了一下自動(dòng)注入service層的接口,還是null。


上網(wǎng)查了資料之后,發(fā)現(xiàn)web容器的初始化順序是按照Listener-filetr-servlet的順序進(jìn)行的,因?yàn)閐ispatcherServlet是在fileter之后才初始化,也就是這時(shí)候我們要自動(dòng)注入的bean才被初始化。所以,到這里我們就明白了,在我們進(jìn)行自動(dòng)注入的時(shí)候還沒有bean,因此會(huì)注入失敗。

但是使用ApplicationContext對(duì)象來(lái)獲取bean就行了,完美解決。

可以看到,這時(shí)的service和dao對(duì)象已經(jīng)不再是null。