文档章节

SpringBoot中静态变量注入

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

开发过程中可能会写一些工具类,为了调用方便,一般工具类中的方法都习惯使用静态方法的方式,但是有的场景中,工具类中需要依赖注入其他加了@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
博文 9
码字总数 9246
作品 0
昌平
SpringBoot启动时的Banner设置

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

davelet
2015/10/07
0
0
springboot学习(二)——springmvc配置使用

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

嘻哈开发者
04/26
0
0
10分钟入门SpringBoot

SpringBoot是基于spring框架衍生的一种新的微服务框架,如果对Spring有一定了解的同学肯定知道在Spring中需要配置各种xml文件完成bean的注册操作,随着服务越来越多,配置就变得越来越复杂,...

jwfy
06/14
0
0
SpringBoot 2.0.0 注入SpingCloud 有bug(目前只有SpringBoot 1.5+ 版本的支持)

今天弄了一整天,想将SpringBoot 2.0.0 注入SpingCloud 2.0.0版本有个bug,一天都没有弄好,晚上换了个1.5+的版本,同样的操作1.5+版本支持,2.0.0版本暂时不支持。 请升级一定要慎重啊,还是...

王木东
03/20
0
0
springboot情操陶冶-@SpringBootApplication注解解析

承接前文springboot情操陶冶-@Configuration注解解析,本文将在前文的基础上对@SpringBootApplication注解作下简单的分析 @SpringBootApplication 该注解是springboot最集中的一个注解,也是...

南柯问天
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg调试C源码级驱动

联机方式不多说了。我博客里有,英文的。 windbg联机文档 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debug-universal-drivers---step-by-step-lab--echo-kernel......

simpower
26分钟前
0
0
redis快照和AOF简介

数据持久化到硬盘:一是快照(snapshotting),二是只追加文件(append-only file AOF) 快照 核心原理:redis某个时间内存内的所有数据写入硬盘 场景:redis快照内存里面的数据 1. 用户发送bgsav...

拐美人
27分钟前
0
0
这个七夕,送你一份程序员教科书级别的告白指南

给广大爱码士们的高能预警: 今天,就是七夕了…… (单身非作战人群请速速退场!) 时常有技术GG向个推君抱怨 经过网民多年的教育 以及技术人持之以恒的自黑 冲锋衣狂热分子·格子衫骨灰级粉...

个推
31分钟前
0
0
python爬虫日志(15)cookie详解

转载:原文地址 早期Web开发面临的最大问题之一是如何管理状态。服务器端没有办法知道两个请求是否来自于同一个浏览器。那时的办法是在请求的页面中插入一个token,并且在下一次请求中将这个...

茫羽行
32分钟前
0
0
qlv视频格式转换器

  腾讯视频中的视频影视资源有很多,小编经常在里面下载视频观看,应该也有很多朋友和小编一样吧,最近热播的电视剧也不少,如《香蜜沉沉烬如霜》、《夜天子》还有已经完结的《扶摇》,这么...

萤火的萤火
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部