1. 程式人生 > >【最簡單的解決方案】spring框架中普通類(工具類)呼叫service

【最簡單的解決方案】spring框架中普通類(工具類)呼叫service

                   這套解決方案,純屬博主自己琢磨相出,絕非網上那些隨意轉載的解決方案!!

                                                                                                                                         ----前言

今天,公司要求我在springboot框架【通用於所有spring專案】的專案中新增一個日誌記錄的操作,大致實現方案就是提供一個日誌工具類,然後將controller層中的資料,通過呼叫這個工具類提供的方法寫入資料庫;

該工具類方法的主要實現邏輯:通過呼叫service,然後再通過mapper操作將資訊寫入資料庫。

要解決的難點:如何在工具類中呼叫service,然後將寫入資料庫。

為了更好的描述問題,先將部分主要程式碼提供給大家。

Logger就是工具類,下方程式碼是在Controller中呼叫工具類的方法。

下方是Logger工具類中注入ServiceImpl的主要程式碼

相信這一步,大家都已經做到了,博主高高興興的便去執行程式碼了,結果報空指標異常!!!

,接下來博主便開始debug,發現上面的manageServiceImpl竟然是null!!

那麼接下來需要解決的問題即是:上方的實現根本沒有讓ServiceImpl注入進來。

然後機智的樓主想到,既然你是null,那好,我手動給你建立一個,便new了一個ManageService物件,再去進行資料庫操作,結果並不樂觀,依然空指標異常!!!

下一步,好,我找度娘求助。解決辦法真是讓人眼花繚亂啊,最多的解決方法就是如下所示:

博主尖叫一聲,這TM什麼雞雞,從來沒有的玩法,評論裡竟然一片稱讚。。。抱著試試的態度,結果依然涼涼。

但是,博主就是有一股拼的勁頭,不搞明白決不罷休,俗話說的好,萬變不離其宗,博主決定重新學習spring容器管理物件的基礎知識,終於。。。。。找到了原因。

先列出解決方案,只需要在之前的程式碼上改動一點即可:

在之前的Controller層中注入工具類物件:

注意,注意,最最主要的就是這一點了!!

一定一定要用注入進來的工具類物件,去呼叫工具類的方法!

好了,問題完美解決!!!

下面分析原因:之前博主呼叫工具類方法時,是手動new出來的工具類,正是因為是手動new出來的物件,所以不歸spring容器管理,繼而,這個物件裡面的成員屬性(即serviceImpl)自然不能注入進來。而當我使用注入進來的工具類物件時,此時物件是由spring容器管理的,所以此物件中的成員屬性(即serviceImpl)是可以注入進來的,繼而完美!!!