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
0
投稿
猜你喜欢
- 概述Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,
- 本文实例讲述了Java删除二叉搜索树的任意元素的方法。分享给大家供大家参考,具体如下:一.删除思路分析在删除二叉搜索树的任意元素时,会有三种
- 前言在java Thread类中,我们会看到interrupt()、interrupted()及isInterrupted(),在大多数情况
- 本文实例讲述了Android编程之手机壁纸WallPaper设置方法。分享给大家供大家参考,具体如下:/** * Andorid设置手机屏幕
- final,static,this,super 关键字总结正文开始@Assassin1. final 关键字:final 关键字,意思是最终
- [LeetCode] 205. Isomorphic Strings 同构字符串Given two strings s
- substring(参数)是java截取字符串的一个方法。它有两种传参的方式:第一种:public String substring(int
- 本文实例为大家分享了java实现2048小游戏的具体代码,供大家参考,具体内容如下效果图:游戏介绍:1.2048是一款益智类小游戏,刚开始随
- 引言:关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽。上次突然一个同事问了我jav
- 利用Java,在控制台操作下,编写的五子棋,作为复习二维数组,面向对象等基础知识。w表示白棋,b表示黑棋import java.util.S
- 这篇文章主要介绍了JAVA基于SnakeYAML实现解析与序列化YAML,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 由于在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,所以通过查阅资料做了一个简单的设计和实现。邮箱激活背景:几乎每个网站或论坛之类
- springboot默认的打包方式为jar包,jar包的有优点是不需要更改的配置,并且内嵌了tomcat,如果打成jar包直接可以丢到doc
- AOP注解无效,切面不执行的解决想做一个api请求日志,想到使用aop,配置过程中遇到了一个坑,aop不起作用,我的aop是这样的:pack
- [程序中使用的数据结构和符号说明]HitBrick类GreenBallThread控制小球路线xUp,yUp,bouncing定义变量存储1
- 一.OO(面向对象)的设计基础面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、
- 下载maven 解压路径: 打开环境变量:右键此电脑-属性-高级系统设置-高级-环境变量添加以下系统变量:测试:win+
- 阅读收获理解SpringBoot自动配置原理一、SpringBoot是什么SpringBoot 的诞生就是为了简化 Spring 中繁琐的
- Interface Segregation Principle,ISP接口隔离原则主张使用多个专门的接口比使用单一的总接口要好。一个类对另外
- 抽象方法与虚方法的区别先说两者最大的区别:抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。因为抽