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