首页 > 其他分享 >Spring Boot中Service层依赖注入问题随笔

Spring Boot中Service层依赖注入问题随笔

时间:2023-07-05 17:26:07浏览次数:38  
标签:applicationContext name Service Spring Boot getBean static public

问题描述:

   Controller 层方法为 static 静态,引入 Service 层时使用 @Autowired 注解自动装配,Controller层方法里无法调用Service层,于是加static修饰Service层的注入

产生错误:

  调用Service层进行数据库操作时,注入的Service层报空指针异常( NullPointerException )

问题原因:

   静态变量需要在实例化后才能使用,而静态变量没有实例化时为null,导致空指针异常。

   static与 @Autowired 注解冲突,导致自动装配拉胯

解决方法:

  1. 去掉  static 修饰符
  2. 手动注入

手动注入方法:

  1、使用工具集 hutool,引入 Maven 依赖

 <!--工具集-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.12</version>
        </dependency>

  根据类装配  Bean ,或其它方式

 SpringUtil.getBean(Service.class); 

   2、编写  SpringUtil  工具类

package com.lesliecheung.util.spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @Package_Name com.lesliecheung.util.spring
 * @Author yi.li/Leslie Lee
 * @TIME 11:57
 * @Version 1.0
 * spring工具类
 */
@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @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);
    }

}

 使用 static 静态块初始化

 

 

 

 

 

 

                Leslie Cheung 随笔

标签:applicationContext,name,Service,Spring,Boot,getBean,static,public
From: https://www.cnblogs.com/Leslie-Cheung/p/17528839.html

相关文章

  • 4. SpringBoot整合mybatis
    1.回顾Spring整合Mybatis​Spring​整合Mybatis​需要定义很多配置类​SpringConfig​配置类导入JdbcConfig​配置类导入MybatisConfig​配置类@Configuration@ComponentScan("com.itheima")@PropertySource("classpath:jdbc.properties")@Import({Jdbc......
  • Spring Aop 所有需要的Maven依赖
    <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency>这个依赖是AspectJ的编织器(weaver),它是一个面向切面编程(AOP)的工具,用于在运行时对Java代码进行横切(cross-cutting)操作和增强。As......
  • SpringMVC框架详解:模型+核心组件+实现原理等详解
     MVC模型SpringMVC基于MVC模式,因此理解SpringMVC需要先对MVC模式有所了解。MVC是model、view、和controller的缩写,是软件开发中一种常用的架构模式。MVC各部分根据职责进行分离,使程序的结构更为直观,增加了程序的可扩展性、可维护性、可复用性。可以用如下的图形来......
  • springboot 加载自定义的属性配置文件 或者xml文件
    1、properties user.propertiesname=zhangshanage=18  2、xml Pen1.xml<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd"><properties><......
  • spring各版本冲突:Failed to process import candidates for configuration class [com
    今天又发现一个通病##springcloud-springcloudalibaba-springboot的版本对应关系#########报错如下:Failedtoprocessimportcandidatesforconfigurationclass[com.example.SunApplication];nestedexceptionisorg.springframework.core.NestedIOException:ASMC......
  • 3. SpringBoot整合junit
    1.回顾Spring整合junit‍@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=SpringConfig.class)publicclassUserServiceTest{@AutowiredprivateBookServicebookService;@TestpublicvoidtestSave(){bookS......
  • kubesphere devops部署springboot项目
    一:使用流水线devops部署springboot项目的流程: 二、本次项目结构: 其中Dockerfile:FROMopenjdk:8-jdkLABELmaintainer=leifengyang#dockerrun-ePARAMS="--server.port9090"ENVPARAMS="--server.port=8080"RUN/bin/cp/usr/share/zoneinfo/Asia/Shanghai/et......
  • 金蝶Apusic 应用服务器9.0版本上,springboot项目关于文件上传的一个问题
    金蝶Apusic应用服务器9.0版本上,springboot项目关于文件上传的一个问题 项目部署在金蝶v9上使用文件上传时,请求接口获取不到参数。但是在本地启动应用是可以获取到参数,没有任何问题。 @RequestMapping("doUpload")publicvoiddoUpload(DocAttaPagepage,@RequestParam(val......
  • Spring中bean标签的所有属性以及作用
    在Spring中,bean标签用于定义和配置bean对象。以下是常用的bean标签属性及其作用:id:指定bean的唯一标识符。在整个Spring容器中,每个bean都必须有一个唯一的id。class:指定bean的类名。通过该属性,Spring将实例化并管理指定类的对象作为bean。name:用于指定bean的名称。除了id属性......
  • Spring中getBean方法的使用方法
    在Spring中,可以使用getBean()方法从容器中获取一个已注册的bean实例。以下是getBean()方法的使用方法:使用ApplicationContext获取bean://创建Spring应用上下文ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");//通过bean的名......