spring框架中普通类(工具类)调用service

今天,公司要求我在springboot框架的项目中添加一个日志记录的操作,大致实现方案就是提供一个日志工具类,然后将controller层中的数据,通过调用这个工具类提供的方法写入数据库;

该工具类方法的主要实现逻辑:通过调用service,然后再通过mapper操作将信息写入数据库。

要解决的难点:如何在工具类中调用service,然后将写入数据库。

为了更好的描述问题,先将部分主要代码提供给大家。

Logger就是工具类,下方代码是在Controller中调用工具类的方法。

下方是Logger类中注入ServiceImpl的主要代码

相信这一步,大家都已经做到了,博主高高兴兴的便去运行代码了,结果报空指针异常!!!!,凉了,凉了,接下来博主便开始debug,发现上面的manageServiceImpl竟然是null!!

问题发现了:上方的实现根本没有让ServiceImpl注入进来 啊!

然后机智的楼主想到,既然你是null,那好,我手动给你创建一个,便new了一个ManageService对象,再去进行数据库操作,结果并不乐观,依然空指针异常!!!

下一步,好,我找度娘求助。解决办法真是让人眼花缭乱啊,最多的解决方法就是如下所示:

博主尖叫一声,这TM什么鸡鸡,从来没有的玩法,评论里竟然一片称赞。。。抱着试试的态度,结果依然凉凉。

脑子里现在都是凉凉,但是博主就是有一股拼的劲头,不搞明白决不罢休,俗话说的好,万变不离其宗,博主决定重新学习spring容器管理对象的基础知识,终于。。。。。找到了原因。

先列出解决方案,只需要在之前的代码上改动一点即可:

在之前的Controller层中注入工具类对象:

注意,注意,最最主要的就是这一点了!!

一定一定要用注入进来的工具类对象,去调用工具类的方法!

好了,问题完美解决!!!

下面分析原因:之前博主调用工具类方法时,是手动new出来的工具类,正是因为是手动new出来的对象,所以不归spring容器管理,继而,这个对象里面的成员属性(即serviceImpl)自然不能注入进来。而当我使用注入进来的工具类对象时,此时对象是由spring容器管理的,所以此对象中的成员属性(即serviceImpl)是可以注入进来的,继而完美!!!

转载于:https://my.oschina.net/u/3933416/blog/3051000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值