基于Spring+SpringMVC+Hibernate框架系统, 利用SpringAOP实现写日志,切入点的Controller层出现@AutoWire 注入Service为null的情况分析

  基于Spring+SpringMVC+Hibernate框架系统, 利用SpringAOP实现写日志,切入点的Controller层出现@AutoWire 注入Service为null的情况分析

最近为了拓展系统,增加了对Controller层写日志的功能,实现方式是基于Spring的AOP来实现的,具体的实现方法我就写了,网上一大堆实现过程。整个实现过程一开始非常快速简单,而且运行基本没有问题。 但突然在要求全面添加Controller的方法日志后,就出现了一个怪异的问题,这个问题就是有一个控制层中用@AutoWired注入的所有Service为null,导致出现java.lang.NullPointerException空指针异常,而其他控制层没出现这种情况。

诡异的是其他控制层没有出现这种情况,日志记录也正常,唯独就这一个控制层出现@AutoWired无法注入的问题,但这个控制层Controller也能正常访问,方法的日志也能正常记录到数据库,就Service没有注入,为null无法使用。一开始我就怀疑可能是文件配置除了问题,检查了一遍也没发现错误的地方,然后又在网上各种百度来确认我的配置是不是有问题,最后都可以确认我的配置没有问题。这其中包括注解包的扫描控制、动态代理是开启等等,真心没发现那里配置错的。在网上也各种查询资料来解答疑惑,但是都说是配置问题,而有的也没有答案能正确解释和解决这个问题的方案。

折腾了两天,我无意中发现了导致这个问题可能原因,最后经过验证证实了我的发现是对的,这就是原因:这个Controller层的所有RequestMapping方法全部是私有的(private),导致在动态代理过程中无法注入private对象。这里跟用@Autowire还是@Resouce没有关系。就是被设置为私有方法导致的。哎呀妈呀 我的天,这个是哪个兔崽子写的顿时气愤啊。(这说明现在的这些程序员质量太差,会敲几个代码就想说自己是程序猿,原理都没搞懂就写程序,哎 坑)    

在这个排查过程中也充分的暴露了许多问题,同时也学习到了很多东西。Spring这个庞大的框架如今确实想完全学透是不太可能的,因为它太强大了.还有就是问题排查的思路有问题,一开始的方向是对,不过就是太过于专注在这个方向导致掉进大海了。所以我一直坚信没有解决不了的问题,只是脑子不好使。

当然是否还有情况 也可能导致这个问题,目我不好给予评价,但是需要注意的就是,Bean对象扫描过程不能重复扫描(类似事务不起作用),这样也能导致出现这种现象。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使马克

写博客不易,客观打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值