文档章节

SpringBoot中静态变量注入

Jetyang
 Jetyang
发布于 08/08 15:44
字数 654
阅读 725
收藏 22

开发过程中可能会写一些工具类,为了调用方便,一般工具类中的方法都习惯使用静态方法的方式,但是有的场景中,工具类中需要依赖注入其他加了@Component注解的交由Spring容器管理的类。静态方法中调用成员变量的时候需要成员变量也是静态的。那么问题来了,学挖掘机到底哪家强?当使用

@Autowired
priavte static BeanClass beanname;

的时候,在方法中无法实例化这个变量,就会出现NullPointerException。具体原因是什么呢?

  • 静态变量不是对象的属性,而是类的属性。

  • 类加载的时候已经初始化好此变量。

  • 初始化此变量时还未通过Spring容器实例化。

以上原因导致了,这个对象是null,所以在调用的时候回出现空指针异常。那么怎么解决这个问题呢?目前来说有三种方法,一种是通过xml配置去解决,但是SpringBoot框架简化了配置文件这种繁琐的存在,所以这里我们不再赘述,主要讲另外两种方法,一个也还是通过@Autowired注解,另一种是通过@PostConstruct注解。以下是具体实现。

  • @Autowired
priavte static BeanClass beanname;

public static BeanClass getBeanname(){
	return beanname;
}

@Autowired
public void setBeanname(BeanClass bean){
	Utils.beanname = bean;
}

此处为变量添加get set方法,一定要注意,这里的set方法不是静态的,否则会出现和上边一样的问题,还是无法实例化对象。而且,BeanClass一定是要添加@Component注解或者类似注解,可以让Spring容器扫描到,而且成员变量上不需要再加@Autowired注解。

  • @PostConstruct

首先在当前类上添加@Component注解,让Spring容器能扫描到。

priavte static BeanClass beanname;

@Autowired
private BeanClass beanname2;

public static BeanClass getBeanname(){
	return beanname;
}

public void setBeanname(){
	Utils.beanname = beanname2;
}

@PostConstruct
public void init(){
	this.setBeanname();
}

此处的set方法同上,一样不能用静态修饰,此处会有编译异常,具体原因我就不说了。

这样可以实现在工具类中,为一个静态变量实现依赖注入了。当然,既然是工具类,还是尽量不要这么复杂了。

© 著作权归作者所有

共有 人打赏支持
Jetyang
粉丝 3
博文 10
码字总数 9960
作品 0
昌平
SpringBoot启动时的Banner设置

对于使用过SpringBoot的开发者来说,程序启动的时候输出的由字符组成的Spring符号并不陌生。这个是SpringBoot为自己设计的Banner: . _/\ / ' () _ ( ( )_ | ' | '| | ' / ` | \/ )| |)| | | ...

davelet
2015/10/07
0
0
spring boot整合Websocket笔记

特别说明:自学笔记 使用websocket有两种方式: 使用sockjs, 使用h5的标准。 使用Html5标准自然更方便简单,所以记录的是配合h5的使用方法。 1、pom.xml中添加如下: 核心是@ServerEndpoint...

jackcooper2015
2017/12/28
0
0
Spring Boot 之Websocket 编程笔记

有时候会用到向前端页推送消息的情况,这时候就会用到WebSocket 编程了, 1.在pom.xml 中添加如下配置 1.1核心是@ServerEndpoint这个注解。这个注解是Javaee标准里的注解,tomcat7以上已经对...

kuchawyz
09/20
0
0
springboot学习(二)——springmvc配置使用

以下内容,如有问题,烦请指出,谢谢 上一篇讲解了springboot的helloworld部分,这一篇开始讲解如何使用springboot进行实际的应用开发,基本上寻着spring应用的路子来讲,从springmvc以及web...

嘻哈开发者
04/26
0
0
Spring Boot学习笔记

属性复制 spring的BeanUtils.copyProperties用法 文件上传与下载 springboot 上传文件到服务器 Spring Boot2.0连载(33)-- Spring Boot文件上传下载 SpringBoot项目的The temporary upload ...

OSC_fly
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js的

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach items="${topics}" var="item" varStatus="status"> </c:forEach> 注意 c:forEach E大写 varStatus ......

踏破铁鞋无觅处
22分钟前
0
0
带你走进java集合之ConcurrentHashMap

一、概述 上一篇文章《带你走进java集合之HashMap》分析了HashMap的实现原理,重点分析了HashMap是怎么样的一种数据结构,以及如何去插入,查询,扩容等操作。相信经过上一篇文章的学习,大家...

木木匠
23分钟前
0
0
spring-boot 热加载实现替换

参考资料 1、spring-boot 热加载实现替换

哎小艾
25分钟前
0
0
kotlin使用spring mvc(二)

使用FilterRegistrationBean注册Filter 使用WebFilter配置过滤器的缺点是不可以对过滤器进行排序,但是使用FilterRegistrationBean可以设置Filter执行的顺序 编写过滤器 class CustomFilter...

weidedong
26分钟前
0
0
Qt那些事0.0.5

碰到了中文乱码问题。 虽然是自己做了件令自己都不齿的事情,但是情急之下,暂且如此:将中文硬编码进代码中。 我也想通过tr+qm翻译进行转换,但是难过的是,tr之后,找不到或者不起作用。这...

Ev4n
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部