关于Java中@Component的使用中出现@Autowired为NULL的问题
解决过程
我在写一个项目中使用@Component
配置了一个RedisCompent在这里插入代码片
类我将在AccountController
和 UserinfoController
中对该类进行了依赖注入
但是最疑惑的是在 AccountController
调用 rediscompent使用其中方法是爆出 rediscompent is null
这个报错 但是在userinfoController
中缺并未报错
让我百思不得其解(就好比你在北京拿了一锁和钥匙在北京就能打开,但是去了山西就不行了,这把锁也没有收到任何环境的影响还是原本的那把锁);
我就去看了注入依赖 发现也没有什么问题
然后我去上网查资料找到了以下几种解决方法 (@Component加入容器之后@Autowired注入为null)@Autowired注入为null
-
Bean对象并没有交给Spring管理
检查@Autowired的对象是否已经被注入到Spring容器中了;
确保使用@Autowired注解的对象也已存在Spring的容器中。 -
对象使用过new关键字
当一个对象使用过关键new时,它是不能被Spring所管理的。
所以如果在这些对象中使用@Autowired去注入对象,得到的结果也是为null。
以上都不行最后觉得有一种可能
在@Component注解的类下,再使用了@Resource或@Autowired注解。如此操作会导致依赖注入失败。
这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的时候,因为@Autowired是在这个bean之中的,此时@Autowired还未完成自动装载,所以导致依赖注入的service为null
最后我我使用在通过set方法进行注入成功解决了这个报错
但是我还是不理解为什么在同一个controller包下在usercontroller中就可以使用 在accountcontroller下面就报错 如果大佬知道,可发评论告知小弟,小弟感激不尽
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力