SpringBoot在自定义类中调用service层等Spring其他层

摘要:
而是调用服务层。编译正常。当它运行到调用它的位置时,将报告空指针异常。跟踪异常位置时,发现服务为空。也就是说,控制器层通过@Autowired注入服务层以失败。包括:1)将工具类声明为弹簧组件,例如@controller@compent在弹簧自动扫描包设置中添加工具类的包;无效2)新建服务;无效的等待

背景:
做了一个TCP服务器来接入智能设备,然后需要将设备实时发送的定位等关键信息存储到数据库。为了考虑将来可能对外提供rest接口,采用将TCP服务器集成到SpringBoot框架,当然,也是为了能最快利用mybatis框架实现数据访问,然后依次解决了如何启动,如何注销等各种问题,然后在TCP服务器消息处理时,需要写数据库,直接调用DAO层,编译报错。改为调用Service层,编译正常,运行到调用的地方,报空指针异常,跟踪到异常位置,发现service为空,也就是按照之前controller层通过@Autowired注入service层失效。
解决方案:
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对象,静态存储下来,防止被释放。

那些趟过的坑:
刚开始调用的时候,总觉得很简单,以前springmvc写个配置,将对象标注为bean就可以随意调用Spring IOC容器的beans了,但是这是SpringBoot,估计还是有区别,一次试验了百度出来的前三页帮助,基本没有成功的。包括:
1)将工具类申明为spring组件,如@controller @compent 等,在spring自动扫描包设置中将工具类所在的包加进来; 无效
2)new一个service; 无效;
等等!

免责声明:文章转载自《SpringBoot在自定义类中调用service层等Spring其他层》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FastReport.Net使用:[19]复选框的使用判断视图存不存在下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TCP/IP协议族基本知识

常见的网络拓扑 两台主机通信的过程:应用进程产生消息,经由主机的 TCP/IP 协议栈发送到局域网(LAN),最后经过广域网(目前最大的广域网的因特网)中的网络设备(路由器)传给目的主机所在的局域网(LAN),最后经过局域网(LAN)将报文传送个目的主机,经由主机 TCP/IP 协议栈处理,将消息递交给目的应用程序。网络拓扑如下: 图中路由器是网络中的架...

log4cplus使用

框架说明: ​Log4cplus使用指南  C++日志库log4cplus:SocketAppender记录日志到log Server ​配置文件: log4cplus库(四)(优先级与日志配置) log4cplus配置文件使用     最近项目涉及到日志记录​功能,因此学习了写log4cplus框架,下载下来源码后研究了几天,上面几篇文章都是学习过程中觉...

spring集成Redis(单机、集群)

一、单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig"> <!--控制一个pool可分配多少个jedis实例 --> <property name="maxTo...

全网最通俗易懂理清mybatis中SqlSession、SqlSessionTemplate、SessionFactory和SqlSessionFactoryBean之间的关系

摘自:https://www.cnblogs.com/xiaoming0601/p/12166160.html 我潇洒的灰大狼又回来啦。今天送大家的一句话是: 保持耐心,永远年轻,永远热泪盈眶。 前言 先容我哭一会儿,呜呜呜~昨晚写了一半的文章,还没保存就盖上盖子准备回家,拔下电源准备把电脑塞进书包带回家完成时,懒惰阻止了我,最终还是没带回家,于是,遭报...

No fallback instance of type class found for feign client user-service(转)

1、错误日志 在 feign 开启熔断,配置 fallback 类,实现当前接口的实现类时,报错信息如下: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 7204...

[Java工程实践] 1.Java常用概念:Bean

一、Java Bean基本概念: 1、所有属性为private2、提供默认构造方法3、提供getter和setter4、实现serializable接口 作者:杨博链接:https://www.zhihu.com/question/19773379/answer/31625054来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...