SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法

这篇文章主要介绍了SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法,大多数情况下,我们使用Springboot是创建一个maven项目,然后通过controller层的接口调用,但也有特殊情况,文章介绍的非常详细,需要的朋友可以参考下

大多数情况下,我们使用Springboot是创建一个maven项目,然后通过controller层的接口调用。但也有特殊情况,比如将需要传参的接口直接打包成可执行jar包运行,这个时候,就需要在启动类main方法中注入Bean,调用Service层方法使用。
按照常规service方法调用实现,报错如下:

报错原因:是service注入为空,service无法导入到非controller层中去

解决方法:注入bean

1、首先建立一个Spring工具类:SpringUtil

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
 
@Component
public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;
 
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringUtil.applicationContext == null){
            SpringUtil.applicationContext  = applicationContext;
        }
    }
 
 
    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
 
    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }
 
    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }
 
    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }
}

ApplicationContextAware :当一个类实现ApplicationContextAware接口后,这个类就可以方便获得ApplicationContext中所有的bean。简言之,就是这个类可以直接获取spring配置文件中所有有引用到的bean对象。

ApplicationContext:ApplicationContext是由BeanFactory派生而来的,BeanFactory负责配置、创建、管理Bean,是Spring容器最基本的接口;
BeanFactory的许多功能需要变成实现,而ApplicationContext中则可以通过配置的方式实现,即:
在构建容器的时候,ApplicationContext创建对象采用的策略是立即加载的方式,即只要一读取完配置文件就立即创建配置文件中配置的对象。BeanFactory采用的是延迟加载的方式,什么时候根据id获取对象了,什么时候才真正地创建对象。

2、在main方法中调用service,注意要启动入口类 SpringApplication.run(TextCutApplication.class, args);
加载Spring配置文件时,如果Spring配置文件中所定义的类实现了ApplicationContextAware接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware接口中的setApplicationContext方法,获得ApplicationContext对象。
ApplicationContext对象是由Spring注入的,前提必须在Spring配置文件中指定该类。

到此这篇关于SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法的文章就介绍到这了,更多相关SpringBoot service空指针异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程xin3721自学网

Spring Boot项目,通常通过依赖注入(Dependency Injection,DI)将Service的服务对象注入到启动(如`@SpringBootApplication`标注的。这样,你可以直接在启动上创建Service的实例并调用方法。 以下是一个简单的示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Service; // 假设这是你的Service接口 interface UserService { String sayHello(); } // 这是Service的具体实现 @Service public class UserServiceImpl implements UserService { @Override public String sayHello() { return "Hello from Service!"; } } // 启动 @SpringBootApplication public class Application implements CommandLineRunner { // 使用@Autowired注解自动装配UserService private final UserService userService; @Autowired public Application(UserServiceImpl userService) { this.userService = userService; } @Override public void run(String... args) throws Exception { // 调用Service方法 String message = userService.sayHello(); System.out.println("Message received: " + message); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在这个例子启动`Application`实现了`CommandLineRunner`接口,它的`run()`方法会在应用程序启动时被Spring自动调用。在这里,我们注入了`UserServiceImpl`,然后就可以直接调用`sayHello()`方法了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值