Spring Boot中Value属性注入

标签: Springboot 分类: Java 创建时间:2019-04-22 01:40:28 更新时间:2024-11-15 10:49:43

在Spring Boot中使用配置文件中的属性,通常使用@Value和@ConfigurationProperties进行application.yml中配置文件的属性注入。主要介绍Value的使用问题:

1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ConfigFile {
//更新监控表
@Value("${resource}")
public String resourcefile;
public ConfigFile(){
System.out.println(resourcefile);
}
}

出现了为空的情况,为什么呢?

原因主要是因为在SpringBoot进行Component初始化的时候会首先调用构造函数,而这个时候属性还没有准备好,因此就出现了null值。为了验证想法,可以将resourcefile属性的输出放到构造函数之外,等SpringBoot将一个类完成初始化之后在进行,在测试文件中简单编码如下:(想要执行的时候,鼠标放在对应的方法,右键选择run该方法即可)

1
2
3
4
5
6
7
@Autowired
private ConfigFile configFile;

@Test
public void TestConfigFile(){
System.out.println(configFile.resourcefile);
}

测试的输出结果如下:

从结果中可以看出,通过@Value是可以完成属性文件的注入的。那么如何在组件的构造函数中直接注入属性值呢?只需将注入的语句写道构造函数的参数中即可:

1
2
3
4
5
6
7
8
9
10
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ConfigFile {
//更新监控表
public ConfigFile(@Value("${resource}")String resourcefile){
System.out.println("注入的resource是:"+resourcefile);
}
}

结果如下:

也可以实现InitializingBean接口,并重写afterPropertiesSet方法,执行获取属性的动作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Component
public class ConfigDemo implements InitializingBean {
@Value("${url}")
private String url;

public ConfigDemo (){
//此时url null
System.out.println(url);
//or do Other something
}

@Override
public void afterPropertiesSet() throws Exception {
System.out.println(url);
//or do Other init something
}
}
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。