`
ninghq
  • 浏览: 12390 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

原文: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.zip

    在这个"SpringBoot使用Feign调用第三方接口Demo"中,我们将深入探讨如何在SpringBoot项目中集成和使用Feign。首先,我们需要引入Feign的相关依赖。在SpringBoot项目中,我们通常会使用Spring Cloud的Feign实现,因此...

    springboot整合mybatis调用oracle存储过程

    然后,在Spring Boot的Service层,我们可以调用这个存储过程并处理返回的游标数据: ```java @Service public class UserService { @Autowired private UserProcedureMapper userProcedureMapper; public List...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    SpringBoot AOP,即面向切面编程,是Spring框架中的一个重要特性,用于实现代码的横切关注点,如日志记录、事务管理、权限验证等。AOP通过使用代理模式,将这些关注点与核心业务逻辑分离,使得代码更加模块化,更...

    java(spring boot)自定义注解

    在这个特定的场景中,我们探讨的是如何在Spring Boot应用中自定义注解,以及如何利用这个注解进行系统监控的开发。 首先,让我们理解什么是自定义注解。在Java中,注解(Annotation)是一种元数据,它提供了向...

    spring-boot-1-demo

    在 Spring Boot 中,启动类(通常包含 `@SpringBootApplication` 注解)是项目的入口点,它负责初始化 Spring 容器并启动应用。在这个 demo 中,提供了两种不同的结构,即启动类与 Controller 所在的包是否在同一层...

    在自定义spring aop中使用el获取拦截方法的变量值。

    EL是JavaServer Faces (JSF) 和其他Java技术中用于在视图层解析表达式并获取数据的工具,它允许在运行时评估Java表达式,例如获取Bean属性、方法调用等。在Spring AOP中,EL可以帮助我们访问被拦截方法的局部变量,...

    在spring中获取代理对象代理的目标对象工具类

    在Spring框架中,AOP(面向切面编程)是一个核心特性,它允许我们在不修改代码的情况下,对程序的行为进行增强。当我们使用Spring AOP时,实际上我们是在操作代理对象,而不是实际的目标对象。然而,有时候我们需要...

    Springboot启用async异步调用

    在Spring Boot中,启用`async`异步调用是一项关键功能,它允许应用程序在处理请求时启动一个后台任务,而不必等待该任务完成。这在处理耗时操作时尤其有用,如大数据计算、发送电子邮件或文件上传等。下面将详细阐述...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    SpringBoot-SpringData-ManyToOne

    标题“SpringBoot-SpringData-ManyToOne”涉及到的是Spring Boot与Spring Data JPA在处理多对一关系时的应用。Spring Boot是Spring框架的一个轻量级版本,它简化了配置和项目初始化,使得开发者能够更快地开始开发...

    springboot学习思维笔记.xmind

    @Service在业务逻辑层(service层) @Repository在数据访问层(dao层) @Controller在展现层(MVC→SpringMVC) 注入Bean的注解 @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 ...

    springboot-mybatis项目练习

    SpringBoot提供了Spring MVC的异常处理器@ControllerAdvice和自定义异常类,以及Spring Security进行权限管理。日志方面,SpringBoot默认集成了Logback或Log4j2,可以通过配置文件调整日志级别和输出位置。 此外,...

    springboot实例

    这个类应该包含属性如 `username` 和 `password`,并且可能还有其他如 `email`、`role` 等属性。 8. **错误处理**:为了提供良好的用户体验,我们需要处理可能出现的错误情况,例如用户名或密码错误。这可以通过...

    详解SpringBoot 解决拦截器注入Service为空问题

    在SpringBoot应用中,我们经常使用拦截器(Interceptor)来处理一些全局的请求逻辑,比如权限验证、日志记录等。然而,在实际开发过程中,可能会遇到在拦截器中注入Service为空的问题,这个问题通常是由于SpringBoot...

    springBoot整合springData JPA

    - Service层:在业务逻辑层,我们可以调用Repository接口的方法来执行数据库操作,同时处理事务控制和业务规则。 - 整合测试:使用Spring Boot的Test Slice功能,我们可以方便地编写针对特定组件的单元测试,比如...

    SpringBoot 接口访问频率限制(一)

    在IT行业中,尤其是在Web开发领域,接口访问频率限制是一个至关重要的议题。这涉及到系统的稳定性和安全性,防止恶意用户通过频繁请求API接口导致服务过载。本文将深入探讨如何在Spring Boot应用中实现接口访问频率...

    springboot-集成MQ

    本项目"springboot-集成MQ"旨在教你如何将MQ集成到Spring Boot工程中,这对于新手来说是一个很好的学习资源。 首先,我们需要了解MQ的基本概念。MQ是一种异步通信机制,允许应用程序之间通过消息进行通信,而无需...

    SpringBoot Velocity 代码生成模板

    在Spring Boot项目中,使用Velocity模板引擎可以自定义生成代码,如Mapper、Mapper.xml、Service、Controller等。Mapper是数据库操作层,通常配合MyBatis框架使用;Mapper.xml包含SQL语句;Service是业务逻辑层,...

    springboot+spring-data-jpa maven项目

    在这个"springboot+spring-data-jpa maven项目"中,我们看到的是一个基于 Maven 构建的 Spring Boot 应用,它利用了 Spring Data JPA 来实现数据库操作。Maven 是一个项目管理和综合工具,它帮助开发者管理项目依赖...

    springboot与mongo的整合

    在Controller层,你可以处理HTTP请求并调用Service层的方法,如下所示: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @...

Global site tag (gtag.js) - Google Analytics