@Value 注入map yml
时间: 2023-10-27 13:01:36 浏览: 44
可以通过以下方式在 YAML 文件中定义一个 Map 类型的属性:
```yaml
myMap:
key1: value1
key2: value2
key3: value3
```
然后在 Spring Boot 应用程序中通过 `@Value` 注解将它注入到一个 Map 类型的字段中:
```java
@Component
public class MyComponent {
@Value("#{${myMap}}")
private Map<String, String> myMap;
// ...
}
```
注意到 `@Value` 中的表达式使用了 SpEL(Spring Expression Language)语法来引用 YAML 中的 Map 属性。SpEL 表达式中的 `#{}` 表示在运行时对表达式进行求值并注入结果,其中 `${myMap}` 引用了 YAML 中的 `myMap` 属性。最终,`@Value` 将 YAML 中的 Map 属性注入到了 `myMap` 字段中。
另外,如果 YAML 文件中的 Map 属性的值是复杂对象,也可以使用 SpEL 表达式中的 `!yaml` 来将 YAML 字符串解析为对象。例如:
```yaml
myMap:
key1: !yaml { name: "Alice", age: 25 }
key2: !yaml { name: "Bob", age: 30 }
key3: !yaml { name: "Charlie", age: 35 }
```
然后在 Spring Boot 应用程序中通过 `@Value` 注解将它注入到一个 Map 类型的字段中:
```java
@Component
public class MyComponent {
@Value("#{${myMap}}")
private Map<String, Person> myMap;
// ...
}
```
其中 `Person` 是一个 Java 类型,可以使用 `!yaml` 将 YAML 字符串解析为 `Person` 对象。