原文:https://blog.csdn.net/georgeshaw1/article/details/74943089
背景:
做了一个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使用Feign调用第三方接口Demo"中,我们将深入探讨如何在SpringBoot项目中集成和使用Feign。首先,我们需要引入Feign的相关依赖。在SpringBoot项目中,我们通常会使用Spring Cloud的Feign实现,因此...
然后,在Spring Boot的Service层,我们可以调用这个存储过程并处理返回的游标数据: ```java @Service public class UserService { @Autowired private UserProcedureMapper userProcedureMapper; public List...
SpringBoot AOP,即面向切面编程,是Spring框架中的一个重要特性,用于实现代码的横切关注点,如日志记录、事务管理、权限验证等。AOP通过使用代理模式,将这些关注点与核心业务逻辑分离,使得代码更加模块化,更...
在这个特定的场景中,我们探讨的是如何在Spring Boot应用中自定义注解,以及如何利用这个注解进行系统监控的开发。 首先,让我们理解什么是自定义注解。在Java中,注解(Annotation)是一种元数据,它提供了向...
在 Spring Boot 中,启动类(通常包含 `@SpringBootApplication` 注解)是项目的入口点,它负责初始化 Spring 容器并启动应用。在这个 demo 中,提供了两种不同的结构,即启动类与 Controller 所在的包是否在同一层...
EL是JavaServer Faces (JSF) 和其他Java技术中用于在视图层解析表达式并获取数据的工具,它允许在运行时评估Java表达式,例如获取Bean属性、方法调用等。在Spring AOP中,EL可以帮助我们访问被拦截方法的局部变量,...
在Spring框架中,AOP(面向切面编程)是一个核心特性,它允许我们在不修改代码的情况下,对程序的行为进行增强。当我们使用Spring AOP时,实际上我们是在操作代理对象,而不是实际的目标对象。然而,有时候我们需要...
在Spring Boot中,启用`async`异步调用是一项关键功能,它允许应用程序在处理请求时启动一个后台任务,而不必等待该任务完成。这在处理耗时操作时尤其有用,如大数据计算、发送电子邮件或文件上传等。下面将详细阐述...
在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...
标题“SpringBoot-SpringData-ManyToOne”涉及到的是Spring Boot与Spring Data JPA在处理多对一关系时的应用。Spring Boot是Spring框架的一个轻量级版本,它简化了配置和项目初始化,使得开发者能够更快地开始开发...
@Service在业务逻辑层(service层) @Repository在数据访问层(dao层) @Controller在展现层(MVC→SpringMVC) 注入Bean的注解 @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 ...
SpringBoot提供了Spring MVC的异常处理器@ControllerAdvice和自定义异常类,以及Spring Security进行权限管理。日志方面,SpringBoot默认集成了Logback或Log4j2,可以通过配置文件调整日志级别和输出位置。 此外,...
在IT行业中,尤其是在Web开发领域,接口访问频率限制是一个至关重要的议题。这涉及到系统的稳定性和安全性,防止恶意用户通过频繁请求API接口导致服务过载。本文将深入探讨如何在Spring Boot应用中实现接口访问频率...
这个类应该包含属性如 `username` 和 `password`,并且可能还有其他如 `email`、`role` 等属性。 8. **错误处理**:为了提供良好的用户体验,我们需要处理可能出现的错误情况,例如用户名或密码错误。这可以通过...
- Service层:在业务逻辑层,我们可以调用Repository接口的方法来执行数据库操作,同时处理事务控制和业务规则。 - 整合测试:使用Spring Boot的Test Slice功能,我们可以方便地编写针对特定组件的单元测试,比如...
本项目"springboot-集成MQ"旨在教你如何将MQ集成到Spring Boot工程中,这对于新手来说是一个很好的学习资源。 首先,我们需要了解MQ的基本概念。MQ是一种异步通信机制,允许应用程序之间通过消息进行通信,而无需...
在Spring Boot项目中,使用Velocity模板引擎可以自定义生成代码,如Mapper、Mapper.xml、Service、Controller等。Mapper是数据库操作层,通常配合MyBatis框架使用;Mapper.xml包含SQL语句;Service是业务逻辑层,...
在这个"springboot+spring-data-jpa maven项目"中,我们看到的是一个基于 Maven 构建的 Spring Boot 应用,它利用了 Spring Data JPA 来实现数据库操作。Maven 是一个项目管理和综合工具,它帮助开发者管理项目依赖...
在Controller层,你可以处理HTTP请求并调用Service层的方法,如下所示: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @...
在本项目中,我们主要探讨如何使用SpringBoot与Elasticsearch(ES)集成,以便查询存储在ES中的日志内容。Elasticsearch是一种强大的、分布式、实时的搜索和分析引擎,常用于处理大量数据,特别是在日志管理和分析...