Spring之注入静态变量的三种方式

Spring不能注入Static变量的原因及Spring注入静态变量 主要介绍了Spring不能注入Static变量的原因及Spring注入静态变量,需要的朋友可以参考下 立即下载

Spring静态注入的三种方式:

(说明:MongoFileOperationUtil是自己封装的一个Mongodb文件读写工具类,里面需要依赖AdvancedDatastore对象实例,dsForRW用来获取Mongodb数据源)

在Spring Framework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这种方式:

@Autowired
private static AdvancedDatastore dsForRW;

可以试一下,dsForRW在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException
因为静态变量/类变量不是对象的属性,而是一个类的属性,Spring则是基于对象层面上的依赖注入。
但是我们经常会使用封装的工具类,并通过@Component注解成功能组件,但是功能组件中的方法一般都是静态方法,静态方法只能调用静态成员变量,于是就有了下面的问题:有的时候封装功能组件会需要底层的service注入,怎么办呢?

去网上搜了下解决办法,简单总结一下几种实现方式:

工具类示例:

public class MongoFileOperationUtil {

    private static AdvancedDatastore dsForRW;

    private static MongoFileOperationUtil mongoFileOperationUtil;

    public void init() {
        mongoFileOperationUtil = this;
        mongoFileOperationUtil.dsForRW = this.dsForRW;
    }
}

1、xml,这种方式适合基于XML配置的WEB项目

<bean id="mongoFileOperationUtil" class="com.*.*.MongoFileOperationUtil" init-method="init">
    <property name="dsForRW" ref="dsForRW"/>
</bean>

2、@PostConstruct

@Component
public class MongoFileOperationUtil {
    @Autowired
    private static AdvancedDatastore dsForRW;

    private static MongoFileOperationUtil mongoFileOperationUtil;

    @PostConstruct
    public void init() {
        mongoFileOperationUtil = this;
        mongoFileOperationUtil.dsForRW = this.dsForRW;
    }
}

@PostConstruct注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,执行init方法;(@PreDestroy注解定义容器销毁之前的所做的操作)
这种方式和在xml中配置init-method和destory-method方法差不多,定义Spring容器在初始化bean和容器销毁之前的所做的操作

3、在setter方法上添加@Autowired注解,类定义上添加@Component注解

@Component
public class MongoFileOperationUtil {

    private static AdvancedDatastore dsForRW;

    @Autowired
    public void setDatastore(AdvancedDatastore dsForRW) {
        MongoFileOperationUtil.dsForRW = dsForRW;
    }
}
  • Spring要能扫描到AdvancedDatastore的bean,然后通过setter方法注入
  • 成员变量上不需要再添加@Autowired注解

转载自 《Spring静态注入的三种方式》

spring 如何将配置信息注入静态变量的方法 本篇文章主要介绍了spring 如何将配置信息注入静态变量的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案

本文详细介绍了一种基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案。该方案通过FFmpeg将摄像头RTSP协议流转换为浏览器友好的HLS格式,并利用Nginx进行高效分发,最终结合Video.js构建前端播放页面,实现无需插件的跨平台实时监控。方案具有免费、轻量、稳定、易于部署的特点,适合中小企业、个人开发者快速搭建内部监控或展示系统。

weixin_28040125的博客 344

spring静态变量如何注入

spring静态变量如何注入 背景 这种写法,是注入不了的,结果打印 null 值 @SpringBootTest @RunWith(SpringRunner.class) public class MyTest { @Autowired private static ApplicationContext applicationContext; @Test pub...

w8y56f的专栏 1411

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

SpringBoot中静态变量注入方案,一网打尽

前言 Hi,大家好,我是麦洛,昨天同事来找我。说自己想使用@Value注解来注入值,但是发现注入不进去,想让我帮忙看看。研究了一番,最后发现是@Value注解无法注入静态变量。下面我们一起来回顾一下本次的bug。 普通变量 首先我们来看看。如何给普通变量注入值? 例如,application-dev.yml 配置文件有如下配置: 给普通变量赋值时,直接在变量声明之上添加@Value()注解即可,如下所示: 这个大家应该很熟悉了,这里就不再赘述。 静态变量 我们来看看昨天的问题,我们想给项目中的文件上传封

麦叔 2459

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1023

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!

最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。

weixin_48747334的博客 1918

springboot注入静态变量的两种方式

1.说明 @value或者@Autowired不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中;spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量。spring 依赖注入是依赖 set方法,set方法是普通的对象方法,static变量是类的属性。 方式1:利用set方法注入 在set方法上增加@value或者@Autowired就可以了 @Component public class MyServiceComponet { pri

myli92的博客 1万+

基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)

(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。

2301_76434107的博客 1894

spring注入静态变量有几种方法?不看的都掉坑里了!

springboot中经常会用到properties文件中的配置,一般使用@Value注入,但是针对Utils工具类,需要注入一个有几种方法?为什么有的同学注入的值为null?

kuailebuzhidao的博客 1648

【数据集】中国各类水文专业常用数据集合集

对中国各类水文专业常用数据集进行整理并总结

WW、forever的博客 9298

第五章-AllData集成DataSophon作为数据平台功能

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。全新会员商业版 X 微信群:https://docs.qq.com/doc/DVHlkSEtvVXVCdEFo

AllDataDC的博客 1637

spring注入静态变量

前言 平时开发当中,需要封装工具类,工具类中的方法大多是静态的方法,而静态方法只能调用静态成员变量。静态变量并不属于对象的属性,而是属于类的属性,而Spring则是基于对象的属性进行依赖注入的。所以用注解注入静态变量是不可行的,会一直报NullPointerException 例如 :直接注入静态的redisTemplate是不行的 @Autowired private static RedisT...

qq_37209293的博客 24万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring静态注入的三种方式

Spring静态注入的几种方式

蓝色骨头的博客 4万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring @Autowired注入为 null 的原因总结

原因 配置缺失,比如为开启注解扫描驱动、注入组件为注册; 使用 new 关键字创建的对象不受spring容器管理,无法注入; 注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。 静态注入的三种方式 在一些工具类中可能会依赖 service 层的对象,一般情况下工具类都是使用静态方法,对应的成员变量也需要声明为静态的,此时如果直接使用 @...

伏念先生的博客 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring依赖注入static静态变量相关问题

Spring依赖注入static静态变量相关问题   版权声明:本文为博主原创文章,转载请注明出处,谢谢。 https://blog.youkuaiyun.com/rongxiang111/article/details/78881371 1.Spring不支持依赖注入static静态变量 在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean...

大大肉包博客 463

Spring静态注入的三种方式 ——基于注解方式

Spring静态注入的三种方式: (说明:MongoFileOperationUtil是自己封装的一个Mongodb文件读写工具类,里面需要依赖AdvancedDatastore对象实例,dsForRW用来获取Mongodb数据源) 在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这种方式: @Autowired pri...

geomon的博客 790

Spring静态注入的三种方式:

Spring静态注入的三种方式: (说明:MongoFileOperationUtil是自己封装的一个Mongodb文件读写工具类,里面需要依赖AdvancedDatastore对象实例,dsForRW用来获取Mongodb数据源) 在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这种方式: [java] view p...

qq158793034的博客 259

Spring - @Value 读取配置属性的三种方式

本文介绍工作中用到的 @Value 读取配置属性的三种方式

O_o 5433

Spring @Autowired 注入为 null

原因 配置缺失,比如为开启注解扫描驱动、注入组件为注册; 使用 new 关键字创建的对象不受spring容器管理,无法注入; 注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。 。 懂的直接上代码先 静态注入的三种方式 在一些工具类中可能会依赖 service 层的对象,一般情况下工具类...

weixin_42981419的博客 174
上一篇: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined(tomcat error)
下一篇: Spring之使用@Value为静态变量赋值
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值