文章使用版本为 Spring Boot 2.1.x
对应入门系列 Spring Boot 入门系列(二) 配置文件
配置自定义参数
在入门文章中我们配置了如下配置:
someone:
name: 张三
age: 20
best-friend: 李四
并且介绍了如何使用自定义的配置,一种是使用 @Value
注入到属性中:
@Value("${someone.name}")
private String name;
@Value("${someone.age}")
private String age;
@Value("${someone.best-friend}")
private String bestFriend;
另外一种是通过 @ConfigurationProperties
注入到 Bean 中:
@ConfigurationProperties(prefix = "someone")
@Component
@Data
public class Someone {
private String name;
private Integer age;
private String bestFriend;
}
除了上面的方式,其实还有其他的方式把自定义参数注入到 Bean 中,下面我们一起看看吧。
第二种方式 使用 @EnableConfigurationProperties
我们现在新建一个类 Someone2,它与 Someone 其实是一样的,不过它没有 @Component
注解,如果只是这样的话,Someone2 是不会被注入属性的,这是因为只有 Bean 被 Spring 管理起来才会注入属性。
@ConfigurationProperties(prefix = "someone")
@Data
public class Someone2 {
private String name;
private Integer age;
private String bestFriend;
}
这个时候很简单,我们只要把 Someone2 声明为 Spring Bean 就可以了,比如:
@Bean
public Someone2 someone2() {
return new Someone2();
}
这里我们也可以使用 @EnableConfigurationProperties
,它的作用就是把注解有 @ConfigurationProperties
的 Bean 注入到 Spring 中:
@Configuration
@EnableConfigurationProperties({Someone2.class})
public class Config {
}
第三种方式 使用 @Bean
+ @ConfigurationProperties
上面的方式都要求 Bean 上有 @ConfigurationProperties
注解,如果某个 Bean 是由框架提供,又没有 @ConfigurationProperties
注解怎么办呢?
@Data
public class Someone3 {
private String name;
private Integer age;
private String bestFriend;
}
其实也是可以注入的,只要我们在声明 Bean 的时候再加上 @ConfigurationProperties
注解就可以了。
@Bean
@ConfigurationProperties(prefix = "someone")
public Someone3 someone3() {
return new Someone3();
}
网友评论