开发者

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

目录
  • 项目场景
  • 解决方案
  • 注解说明
    • 1、@Value("${}")使用示例
    • 2、@Value("#{}"php;)使用示例
  • 总结

    项目场景

    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 SgvwvVExZtring 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; // gvwvVExZ结果: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;

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜