当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中@Value注入静态变量方式

SpringBoot中@Value注入静态变量方式

2025年09月15日 Java 我要评论
项目场景spring boot中静态变量想使用@value注入值:在application.properties或application.yml中定义topic名称:# application.pro

项目场景

spring boot中静态变量想使用@value注入值:

在application.properties或application.yml中定义topic名称:

# application.properties
test.name=测试
@value("${test.name}")
public static string name;

这时候打印发现是空的, 通过上例可以看出,使用@value注解修饰静态属性,启动项目时不会报错,但是也不会给该静态属性设置值。

解决方案

可以通过set方法给静态属性设置配置文件中的属性值。

@service
public class testservice {
 
    private static string name;
    
	@value("${test.name}")
	public void setname(string param) {
		name = param;
	}
	
	public static string getname() {
		return name;
	}
}

注解说明

  1. @value("${}"):可以获取对应属性文件中定义的属性值。
  2. @value("#{}"):表示 spel 表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。

1、@value("${}")使用示例

直接将字符串赋值

@value("hello world")
private string name;

从属性文件中获取值

@value("${test.name}")
private string name; // 结果:测试

设置默认值

@value("${test.name:defaultvalue}")
private string name; // 结果:defaultvalue

2、@value("#{}")使用示例

注入操作系统属性

@value("#{systemproperties['os.name']}")
private string osname; // 结果:windows 10

注入表达式结果

// 生成一个随机数
@value("#{ t(java.lang.math).random() * 1000.0 }")
private double randomnumber;
 
// 使用 system 类获取系统环境变量 path
@value("#{ t(java.lang.system).getenv('path') }")
private string path;

注入其他bean属性

// 其他bean
@component
public class otherbean {
    @value("otherbean的name属性")
    private string name;
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
}
 
// 用法
@component
public class mybean {
    @value("#{otherbean.name}")
    private string fromanotherbean;
    // ...
}

 注意,其他 bean 使用 @component 时,如果没有指定名称,则默认为类名首字母小写,如:otherbean 。

当然我们也可以使用 @component("myname") 形式,指定其他 bean 的名称,此时,访问则需要使用 @value("#{myname.name}")。如下:

// 其他bean,自定义名称为 mybeans
@component("mybeans")
public class otherbean2 {
    @value("otherbean的name属性")
    private string name;
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
}
 
// 用法
@component
public class mybean {
    @value("#{mybeans.name}")
    private string fromanotherbean2;
    // ...
}

注入资源

// 注入文件资源
@value("classpath:props/application.properties")
private resource fileresource;
 
// 注入url资源
@value("https://www.hxstrive.com")
private resource urlresource;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com