SpringBoot通过@Value实现给静态变量注入值详解
作者:蹲街式等待 发布时间:2022-04-30 14:30:37
标签:SpringBoot,@Value,注入值
一、简介
SpringBoot
中给普通变量注入值只需在变量上添加 @Value
注解即可。
application.properties
配置文件有如下配置:
mail.name=admin@163.com
main.pwd=admin123
给普通变量赋值时,直接在变量声明之上添加 @Value()
注解即可。
@Value("${mail.name:admin@163.com}")
private String mailName;
@Value("${mail.pwd:admin123}")
private String mailPwd;
注:需要在类上添加 @Component
注解。
当要给 静态变量
注入值的时候,若是在静态变量声明之上直接添加@Value()
注解是无效的。
@Value("${mail.name:admin@163.com}")
private static String mailName;
@Value("${mail.pwd:admin123}")
private static String mailPwd;
虽然在编译和运行上没有报错,但是mailName、mailPwd的值都是NULL。
那么如何给静态变量注入值呢?
二、@Value给静态变量注入值
方案一
set()方法设置
@Component
public class MailInfo{
public static String mailName;
public static String mailPwd;
@Value("${mail.name:admin@163.com}")
public void setMailName(String name){
mailName = name;
}
@Value("${mail.pwd:admin123}")
public void setMailPwd(String pwd){
mailPwd = pwd;
}
}
注:需要在类上加入 @Component
注解,方法名 setMailName
和参数名 name
可以任意命名。
方案二
@PostConstruct注解修饰的方法中进行赋值
@Component
public class MailInfo{
@Value("${mail.name:admin@163.com}")
public String preMailName;
@Value("${mail.pwd:admin123}")
public String preMailPwd;
public static String mailName;
public static String mailPwd;
@PostConstruct
public void init(){
mailName = preMailName;
mailPwd = preMailPwd;
}
}
三、总结
Spring不允许/不支持把值注入到
静态变量
中;Spring的
@Value
依赖注入是依赖set()
方法;set()
方法是普通的对象方法;static
变量是类的属性,static没有 set() 方法;
来源:https://davis.blog.csdn.net/article/details/125814947


猜你喜欢
- Linux+Docker+SpringBoot+IDEA一键自动化部署的步骤记录从打包到服务器配置上线全流程安装docker详细步骤请戳这里
- 使用maven的profile功能,我们可以实现多环境配置文件的动态切换,可参考我的上一篇博客。但随着SpringBoot项目越来越火,越来
- Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程
- 一. 概述参考开源项目https://github.com/xkcoding/spring-boot-demo在系统运维中, 有时候为了避免
- 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再
- 多线程安全嘛在 Spring 框架中,Bean 是应用程序的核心构建块,代表了在 Spring 容器中管理的对象或组件。Spring 容器负
- 最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过
- Java 执行 JS 脚本工具用途:为了便于系统扩展,提供了 JS 脚本的功能,可以通过在系统中执行脚本来获得更复杂的功能。例如:系统提供了
- 一个是新浪微博,腾讯微博的分享按钮,一个是他们的绑定情况(其实就是是否授权)。点击微博分享中新浪或腾讯按钮,就进行相应的授权(若没授权),显
- 这篇文章主要介绍了Spring整合Dubbo框架过程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下话不多说先上效果前言写这个音乐播放器实在是迫不得已。因为我们
- 一、概述 在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多
- 过滤器实现过滤器需要实现 javax.servlet.Filter 接口。重写三个方法。其中 init() 方法在服务启动时执行,destr
- 23种设计模式第四篇:java单例模式定义: 单例模式,
- 一、准备工作1、你需要android手机应用开发基础2、科大讯飞语音识别SDK android版3、科大讯飞语音识别开发API文档4、and
- 以下内容来自 * ,关于静态类型检查和动态类型检查的解释:•静态类型检查:基于程序的源代码来验证类型安全的过程;•动态类型检查:在程序运行
- 本文实例为大家分享了C#泛型类创建与使用的具体代码,供大家参考,具体内容如下using System;using System.Collec
- 实现一个顺序表接口实现定义一个MyArrayList类,在类中实现以下函数public class MyArrayList {}数组的定义p
- Android RecycleView添加head配置封装的实例这个是把RecycleView的适配器给封装了,直接调用就可以了,还添加了可
- 一、项目搭建1、可以在新建项目的使用Spring MVC框架。或者创建一个简单的项目之后再用Add Framework Support来添加