记一次排查了几个小时的service注入为null问题

联调的时候一个记得没有改动的接口,再次上传调试时报空指针异常了,排查了很久都没找到问题

搜了一个内容比较多的检查攻略:

深入探讨service注入为null问题_笔记大全_设计学院

也没找到具体以问题

最后检查controller方法的修饰符发现public被改private

后来想想是因为之前service的impl包放错了位置,手动移过去的时候导致了方法的修饰符改变,然后导致的问题

最后附上修饰符范围导致无法注入的解释

service 注入为null 踩坑注意_service注入为null-CSDN博客

原因分析:
容器扫描bean生成代理类的时候,public和protected方法可以被正常代理,而private方法的不会被代理,属性的注入也是在代理类中完成,所以public/protected方法获取的注入属性是完成注入的属性,private方法获取的是未完成注入时的属性,所以是null。
AOP切入的方法,其访问权限为protected/public,如果匹配private时,会导致其方法中所有的属性注入 注入失败。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 Spring 框架进行依赖注入时,如果发现被 @Autowired 注解的属性为 null,可能有以下几个原因: 1. 配置不正确:首先,请确保已经正确配置了 Spring 的注解扫描和组件扫描。你可以在配置文件中添加以下内容: ``` <context:annotation-config /> <context:component-scan base-package="your.package.name" /> ``` 这样可以确保 Spring 能够正确扫描到被 @Autowired 注解的类。 2. Bean 未被正确注入:另外一个可能的原因是被注入的 Bean 未能被正确创建和初始化。请确保被注入的类已经被 Spring 容器管理,并且有正确的注解(如 @Component、@Service、@Repository 等)。可以通过打印日志或者在启动时查看 Spring 容器的日志来确认 Bean 是否被成功创建。 3. Bean 的作用域问题:如果被注入的 Bean 配置了特定的作用域(如 prototype),可能会导致注入时为 null。请确保被注入的 Bean 的作用域配置正确。 4. 循环依赖:如果存在循环依赖关系,可能会导致注入失败。请检查是否存在 A 类依赖 B 类,而 B 类又依赖 A 类的情况。这种情况下,可以尝试使用构造函数注入或者使用 @Lazy 注解来延迟加载依赖。 5. 版本兼容性问题:如果使用的是较老的 Spring 版本,可能会存在与 @Autowired 注解相关的兼容性问题。尝试升级到较新的 Spring 版本,或者使用类似 @Inject 或者 @Resource 注解进行注入。 如果以上步骤都没有解决问题,可以提供更多的代码和配置信息以便进行进一步的排查

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值