SpringBoot在自定義類中調(diào)用service層mapper層方式
SpringBoot在自定義類中調(diào)用service層mapper層
最近在整合webscoket,因為在websocket中需要自定義websocket類,而在后端發(fā)送的信息的時候,需要調(diào)用service層mapper層的代碼,或者自己編寫一個工具類,這里在自定義類中使用 @Autowired會報空指針異常,所以不能使用普通的注入方式,百度上能用的教程很多,我這里寫一個我嘗試過能用的。
解決方案
1.上代碼
@Component
public class ServerHandler extends IoHandlerAdapter {
@Autowired
protected HealthDataService healthDataService;
private static ServerHandler serverHandler ;
@PostConstruct //通過@PostConstruct實現(xiàn)初始化bean之前進行的操作
public void init() {
serverHandler = this;
serverHandler.healthDataService = this.healthDataService;
// 初使化時將已靜態(tài)化的testService實例化
}
//測試調(diào)用
public void test(){
serverHandler.healthDataService.<你的service層方法>;
}2.說明
- 將需要調(diào)用Spring的Service層的類通過@Component注解為組件加載;
- 同樣通過@Autowired獲取Service層的Bean對象;
- 為類聲明一個靜態(tài)變量,方便下一步存儲bean對象;
- 劃重點:通過注解@PostConstruct ,在初始化的時候初始化靜態(tài)對象和它的靜態(tài)成員變量healthDataService,原理是拿到service層bean對象,靜態(tài)存儲下來,防止被釋放。
導(dǎo)入mapper層同上
/**
我自己編寫的工具類
*/
@Component
public class GetChartDataUtils {
private static GetChartDataUtils getChartDataUtils ;
@Autowired
private OrderMapper orderMapper;
@PostConstruct //通過@PostConstruct實現(xiàn)初始化bean之前進行的操作
public void init() {
getChartDataUtils = this;
getChartDataUtils.orderMapper=this.orderMapper;
// 初使化時將已靜態(tài)化的orderMapper實例化
}
public static Trend<PosMonth> getOrgMonthTrend() {
Trend<PosMonth> posMonthTrend = new Trend<>();
posMonthTrend.setTitle("客源分析趨勢");
posMonthTrend.setBase(300);
posMonthTrend.setUnit("萬");
List<PosMonth> posMonths = new ArrayList<PosMonth>();
//封裝每個出發(fā)地點每個月的數(shù)據(jù)
PosMonth zzgs = new PosMonth("鄭州工商學(xué)院",getChartDataUtils.orderMapper.queryOriginMonthCount("鄭州工商學(xué)院"));//出發(fā)地為鄭州工商學(xué)院每個月的數(shù)據(jù)
PosMonth zzjt = new PosMonth("河南交通學(xué)院",getChartDataUtils.orderMapper.queryOriginMonthCount("河南交通學(xué)院"));//出發(fā)地為河南交通學(xué)院每個月的數(shù)據(jù)
PosMonth zkzx = new PosMonth("周口中心站",getChartDataUtils.orderMapper.queryOriginMonthCount("周口中心站"));//出發(fā)地為周口中心站每個月的數(shù)據(jù)
PosMonth zzly = new PosMonth("鄭州旅游學(xué)院",getChartDataUtils.orderMapper.queryOriginMonthCount("鄭州旅游學(xué)院"));//出發(fā)地為鄭州旅游學(xué)院每個月的數(shù)據(jù)
//數(shù)據(jù)封裝進趨勢圖
posMonths.add(zzgs);
posMonths.add(zzjt);
posMonths.add(zkzx);
posMonths.add(zzly);
posMonthTrend.setData(posMonths);
return posMonthTrend;
}
public static Trend<PosMonth> getDisMonthTrend() {
Trend<PosMonth> posMonthTrend = new Trend<>();
posMonthTrend.setTitle("去向分析趨勢");
posMonthTrend.setBase(300);
posMonthTrend.setUnit("萬");
List<PosMonth> posMonths = new ArrayList();
//封裝每個去向地點每個月的數(shù)據(jù)
PosMonth zzgs = new PosMonth("周口火車站",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口火車站"));//目的地為周口火車站每個月的數(shù)據(jù)
PosMonth zzjt = new PosMonth("周口市中心站",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市中心站"));//目的地為周口市中心站每個月的數(shù)據(jù)
PosMonth zkzx = new PosMonth("周口市淮陽",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市淮陽"));//目的地為周口市淮陽每個月的數(shù)據(jù)
PosMonth zzly = new PosMonth("周口市項城",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市項城"));//目的地為周口市項城每個月的數(shù)據(jù)
//數(shù)據(jù)封裝進趨勢圖
posMonths.add(zzgs);
posMonths.add(zzjt);
posMonths.add(zkzx);
posMonths.add(zzly);
posMonthTrend.setData(posMonths);
return posMonthTrend;
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java調(diào)用中國天氣網(wǎng)api獲得天氣預(yù)報信息的方法
這篇文章主要介紹了java調(diào)用中國天氣網(wǎng)api獲得天氣預(yù)報信息的方法,可實現(xiàn)調(diào)用溫度、風(fēng)力風(fēng)向及近期天氣狀況等功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法
本篇文章主要介紹了Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
MybatisPlus使用@TableId主鍵id自增長無效的解決
本文主要介紹了MybatisPlus使用@TableId主鍵id自增長無效的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
JpaRepository如何實現(xiàn)增刪改查并進行單元測試
這篇文章主要介紹了JpaRepository如何實現(xiàn)增刪改查并進行單元測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
springboot+nacos+gateway實現(xiàn)灰度發(fā)布的實例詳解
灰度發(fā)布是一種在軟件部署過程中用于平滑過渡的技術(shù),通過引入灰度發(fā)布SDK和配置網(wǎng)關(guān)策略實現(xiàn),本文就來介紹一下,感興趣的可以了解一下2022-03-03
RabbitMq中channel接口的幾種常用參數(shù)詳解
這篇文章主要介紹了RabbitMq中channel接口的幾種常用參數(shù)詳解,RabbitMQ 不會為未確認的消息設(shè)置過期時間,它判斷此消息是否需要重新投遞給消費者的唯一依據(jù)是消費該消息的消費者連接是否己經(jīng)斷開,需要的朋友可以參考下2023-08-08
kill命令在Java應(yīng)用中使用的注意事項小結(jié)
這篇文章主要給大家介紹了關(guān)于kill命令在Java應(yīng)用中使用的注意事項,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

