Spring中@Value常见用法
## 简介 - @Value是Spring框架的一个注解。 - @Value常用来读取配置文件中的特
渲染中...
## 简介
- @Value是Spring框架的一个注解。
- @Value常用来读取配置文件中的特定配置的。
## 主要用法
1. 单纯获取yaml中配置的某个字段
2. 获取yaml中字段并与指定字符拼接
3. 获取yaml中的两个字段拼接
4. 获取yaml中的一个字段Value,作为获取yaml中另一个字段的Key
5. 获取yaml中的字段并进行一定逻辑处理,如:按照“.”分割字符串
> 其中,第一个用法是最常用的,其他用法不常用,但作为程序员,我认为我们有必要了解,让我们知道有这种用法,在某些奇怪的需求出现时,能想到还有这种用法能帮助我们便捷开发,这是我们程序员进阶的必备能力!
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
<!-- more -->
## 示例
### 代码
```java
@Component
public class Test {
// 最简单的用法
// @Value("${test.db-url}")
// private String url;
// 基础嵌套
@Value("${test.${test.prefix}url:127.0.0.1}")
private String url;
// 基础嵌套
@Value("${test.${test.prefix}port}")
private String port;
// 并列连接
// @Value("#{'${test.db-url:127.0.0.1}:${test.db-port:8080}'}")
@Value("${test.db-url:127.0.0.1}:${test.db-port:8080}")
private String hostPort;
// 高级嵌套
@Value("${test.db-url:127.0.0.1:${test.db-port:8080}}")
private String hostPort2;
// 更高级嵌套
@Value("#{'${test.db-url:127.0.0.1}'.split('\\.')}")
private String[] number;
@PostConstruct
public void run() {
System.out.println(url);
System.out.println(port);
System.out.println(hostPort);
System.out.println(hostPort2);
System.out.println(Arrays.asList(number));
}
}
```
### Yaml配置
- application.yml
```yml
test:
# db-url: 192.168.0.1
db-port: 9527
prefix: db-
```
### 输出(启动项目,控制台输出)
- 注释掉yml中的``db-url``
```
127.0.0.1
9527
127.0.0.1:9527
127.0.0.1:9527
[127, 0, 0, 1]
```
- 不注释掉yml中的``db-url``
```
192.168.0.1
9527
192.168.0.1:9527
192.168.0.1
[192, 168, 0, 1]
```
## 总结
- ``${}``可以嵌套使用
- ``${}``可以并列使用
- ``#{}``内可以使用``SpEl``表达式,使用一些简单的Java方法。
- ``#{}``内可以使用``${}``,但是需要用引号括起来,可以使用单引号``'${abc}'``或双引号``\"${abc}\"``。
- 根据给出的几个例子,一定可以组合出其他的不常见的用法,可以自行探索。
### 注意
- 另外注意代码中的``hostPort``和``hostPort2``,在注释掉在yml中的``db-url``时,看起来效果是一样的,但没注释掉yml中的``db-url``时,输出的结果``hostPort2``后边的``${}``没生效,说明后一个``${}``是在前一个``test.db-url``没读取到时,才与默认值一起附加使用的。
## 赞助请求V3
**建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!**
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
> PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。`如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~`END
评论
登录后查看和发表评论
前往登录