1.项目需要自定义了一个拦截器,需要在拦截器中获取对应的值所以使用了@Autowired以及@Value注解,但是这么引入取到的值都是NULL值,DEBUG查看以下三个值都为NULL
2.先说下原因,导致为NULL的原因是
(1)拦截器加载的时间点是先于SpringContext的
(2)在代码中使用了new GisInterceptor()(这个GisInterceptor是我自己定义的拦截器名称),new GisInterceptor()会导致个类完全没有交给Spring容器管理,所以@Autowired以及@Value不会在自己定义的拦截器中生效
3.最后说解决方法
(1). 将自己定义的拦截器交给spring容器管理,也就是在自己定义的拦截器上加上@Component注解
(2)代码中有用到new GisInterceptor()的,就用注入代替
我是因为在下面图片的类中用到了new GisInterceptor(),所以在这里用注入代替了new
以上解决方法亲测有效,如果按照上面的修改方法没生效,也可以看下这位老哥的解决方法,要达到的目的都是一致的:
https://blog.csdn.net/Huang1178387848/article/details/114005294
最后一个关于关于@Value注入为NULL的问题
我之前是这么去写的,在其他的类中可以注入到,但是这个类中获取不到,估计也是因为没有将这个类交给spring容器管理
@Value获取的值为NULL最后的解决方法是按照如图这样去写就可以了,这个方法比较粗暴,直接通过静态类做的获取