不是spring托管的对象,怎么用@value获取yml配置
时间: 2024-05-09 22:16:25 浏览: 186
如果对象不是 Spring 托管的,你可以使用 `@ConfigurationProperties` 注解来将 YAML 配置文件中的属性映射到该对象中。具体步骤如下:
1. 在类上加上 `@ConfigurationProperties` 注解,并指定其对应的前缀,如:
```java
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
private String name;
private int age;
// 省略 getter 和 setter 方法
}
```
2. 在 YAML 配置文件中添加对应的属性:
```yaml
myconfig:
name: "John"
age: 18
```
3. 在需要使用该对象的地方直接注入即可,如:
```java
public class MyService {
@Autowired
private MyConfig myConfig;
public void printConfig() {
System.out.println("name: " + myConfig.getName() + ", age: " + myConfig.getAge());
}
}
```
注意:如果你的对象不是 Spring 托管的,则需要手动创建该对象并将其注入到需要使用它的类中,如:
```java
public class MyController {
private MyConfig myConfig;
public MyController() {
myConfig = new MyConfig();
}
@PostConstruct
public void init() {
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("config.yml"));
PropertySource<?> propertySource = new PropertiesPropertySource("yaml", yaml.getObject());
Binder binder = new Binder(propertySource);
myConfig = binder.bind("myconfig", MyConfig.class).get();
}
@RequestMapping("/config")
public String getConfig() {
return "name: " + myConfig.getName() + ", age: " + myConfig.getAge();
}
}
```
阅读全文