在控制器使用@Autowired进行自动注入的时候我没有发现过这个问题,但是今天想做一个自动登录的过滤器的时候,控制台报了错。原因是NULLPOINTEREXCEPTION异常,也就是空指针异常。于是我就debug了一下,发现这里的dao对象是空的,后来试了一下自动注入service层的接口,还是null。
![](https://img.haomeiwen.com/i12978265/d840726940d68feb.png)
![](https://img.haomeiwen.com/i12978265/43f3f750ab85d40e.png)
上网查了资料之后,发现web容器的初始化顺序是按照Listener-filetr-servlet的顺序进行的,因为dispatcherServlet是在fileter之后才初始化,也就是这时候我们要自动注入的bean才被初始化。所以,到这里我们就明白了,在我们进行自动注入的时候还没有bean,因此会注入失败。
![](https://img.haomeiwen.com/i12978265/74b12355070d52a4.png)
但是使用ApplicationContext对象来获取bean就行了,完美解决。
![](https://img.haomeiwen.com/i12978265/b813e1c8e3d1ab1c.png)
可以看到,这时的service和dao对象已经不再是null。
网友评论