錯誤:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NullPointerException] with root cause springboot無法注入,注入后無效
控制台報錯
頁面錯誤
錯誤錯誤原因分析在
在網上找了問題的答案都不能解決,都是講類的Bean沒有注入,
本人的這個錯誤應該有幾個錯誤情況:
項目背景介紹:springboot+mybatis+easyExcel 操作EXCEL表導入導出
坑一:沒有用交給容器管理
解決方法:
1.controller層沒有加@ResponseBody
2.Service層(使用dao層)未添加注解@Autowired或者@Resource
3.@RestController使用成了@Controller
4.dao層 添加注解@mapper 或者主啟動類@MapperScan("com.wqj.mapper")掃描包
坑二: Spring注解對象 被new后注解被破壞(spring容器內bean不可用(為null,對應bean類里面的注入也會為null))
問題:Spring注解對象 為什么還要new?
比如你在自定義標簽里面需要獲得service對象。但是標簽對象本身又不能交給spring管理。所以沒辦法注入。在標簽環境里可以拿到servletContext上下文。spring容器實例化后。容器本身就放在這里。你拿出來。把service取出來就可以了。
解決方法:
(通過spring上下文)普通類獲取Spring容器中的bean (寫工具類調用 )可以參考:https://www.cnblogs.com/s648667069/p/6489557.html
總結:
通過上面的坑,分析自己遇到的問題
1.使用EasyExcel的坑。實際開發中因為讀操作中的監聽器不能交給spring進行管理,所以不能進行注入實現對數據庫的操作
解決方案一:
使用聚合方法,將Service通過有參構造穿進去
解決方案二:坑二的解決方法(本人就是采用的這樣的方法)
參考:https://www.jianshu.com/p/164582e580d3