SpringBoot在自定义类中调用service层mapper层方式
作者:liudachu
这篇文章主要介绍了SpringBoot在自定义类中调用service层mapper层方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
SpringBoot在自定义类中调用service层mapper层
最近在整合webscoket,因为在websocket中需要自定义websocket类,而在后端发送的信息的时候,需要调用service层mapper层的代码,或者自己编写一个工具类,这里在自定义类中使用 @Autowired
会报空指针异常,所以不能使用普通的注入方式,百度上能用的教程很多,我这里写一个我尝试过能用的。
解决方案
1.上代码
@Component public class ServerHandler extends IoHandlerAdapter { @Autowired protected HealthDataService healthDataService; private static ServerHandler serverHandler ; @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作 public void init() { serverHandler = this; serverHandler.healthDataService = this.healthDataService; // 初使化时将已静态化的testService实例化 } //测试调用 public void test(){ serverHandler.healthDataService.<你的service层方法>; }
2.说明
- 将需要调用Spring的Service层的类通过@Component注解为组件加载;
- 同样通过@Autowired获取Service层的Bean对象;
- 为类声明一个静态变量,方便下一步存储bean对象;
- 划重点:通过注解@PostConstruct ,在初始化的时候初始化静态对象和它的静态成员变量healthDataService,原理是拿到service层bean对象,静态存储下来,防止被释放。
导入mapper层同上
/** 我自己编写的工具类 */ @Component public class GetChartDataUtils { private static GetChartDataUtils getChartDataUtils ; @Autowired private OrderMapper orderMapper; @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作 public void init() { getChartDataUtils = this; getChartDataUtils.orderMapper=this.orderMapper; // 初使化时将已静态化的orderMapper实例化 } public static Trend<PosMonth> getOrgMonthTrend() { Trend<PosMonth> posMonthTrend = new Trend<>(); posMonthTrend.setTitle("客源分析趋势"); posMonthTrend.setBase(300); posMonthTrend.setUnit("万"); List<PosMonth> posMonths = new ArrayList<PosMonth>(); //封装每个出发地点每个月的数据 PosMonth zzgs = new PosMonth("郑州工商学院",getChartDataUtils.orderMapper.queryOriginMonthCount("郑州工商学院"));//出发地为郑州工商学院每个月的数据 PosMonth zzjt = new PosMonth("河南交通学院",getChartDataUtils.orderMapper.queryOriginMonthCount("河南交通学院"));//出发地为河南交通学院每个月的数据 PosMonth zkzx = new PosMonth("周口中心站",getChartDataUtils.orderMapper.queryOriginMonthCount("周口中心站"));//出发地为周口中心站每个月的数据 PosMonth zzly = new PosMonth("郑州旅游学院",getChartDataUtils.orderMapper.queryOriginMonthCount("郑州旅游学院"));//出发地为郑州旅游学院每个月的数据 //数据封装进趋势图 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(); //封装每个去向地点每个月的数据 PosMonth zzgs = new PosMonth("周口火车站",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口火车站"));//目的地为周口火车站每个月的数据 PosMonth zzjt = new PosMonth("周口市中心站",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市中心站"));//目的地为周口市中心站每个月的数据 PosMonth zkzx = new PosMonth("周口市淮阳",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市淮阳"));//目的地为周口市淮阳每个月的数据 PosMonth zzly = new PosMonth("周口市项城",getChartDataUtils.orderMapper.queryDestinationMonthCount("周口市项城"));//目的地为周口市项城每个月的数据 //数据封装进趋势图 posMonths.add(zzgs); posMonths.add(zzjt); posMonths.add(zkzx); posMonths.add(zzly); posMonthTrend.setData(posMonths); return posMonthTrend; } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。