Spring @Autowired 注解注入对象为null

困扰了好几天的问题,终于找到解决方案
今天遇到的问题是Spring中使用Autowire的注解注入service,启动过程中debug可以看到proxy对象,但是实际运行中会报NullPointerException。
暴力解决的办法是直接从context里获取bean,不够优雅。目前正在研究Spring代理机制。

问题彻底解决~
原因是使用了AOP切入点,在配置文件中

<aop:aspect id=“userOperationLog” ref=“userOperationLogAspect”>  
<aop:pointcut expression=“execution(\* *.action.*.\*(…))” />  
<aop:after method=“operationLog” pointcut-ref=“userOperationLogCut” />  
</aop:aspect>

expression 包含了我的controller。然后我的方法都是private的。。。这AOP就不干了。
具体原因在这篇博客中有提及:
SpringAOP导致@Autowired依赖注入失败
简单说是因为AOP代理只能取到public和protected方法,private方法并没有被代理获取。
把所有方法改成public,或者在类上加@Aspect注解,问题解决。

此处由于我的controller并不是一个切面服务类,所以我选择把方法改成public。

奇怪的是debug可以进到private代码中,只有Autowired的对象是null。与此同时public方法的Autowired的对象就存在。猜测是每次调用代理方法都做一次注入?暂时存疑。`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值