image
@Value 注解或着使⽤ Spring Environment bean 访问这些属性,是这种注⼊配置⽅式有时显得很笨重。我们将使⽤更安全的⽅式@ConfigurationProperties )来获取这些属性
image
properties文件用什么打开@ConfigurationProperties 的基本⽤法⾮常简单:我们为每个要捕获的外部属性提供⼀个带有字段的类。请注意以下⼏点:前缀定义了哪些外部属性将绑定到类的字段上
根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
我们可以简单地⽤⼀个值初始化⼀个字段来定义⼀个默认值
类本⾝可以是包私有的
类的字段必须有公共 setter ⽅法
xml编辑在线Spring 宽松绑定规则 (relaxed binding)
Spring使⽤⼀些宽松的绑定属性规则。因此,以下变体都将绑定到 hostName 属性上:
image
如果我们将 MailModuleProperties 类型的 bean 注⼊到另⼀个 bean 中,这个 bean 现在可以以类型安全的⽅式访问那些外部配置参数的值。
contacts是什么意思但是,我们仍然需要让 Spring 知道我们的 @ConfigurationProperties 类存在,以便将其加载到应⽤程序上下⽂中( ⾯试还不知道BeanFactory 和 ApplicationContext 的区别?)
企业网站 设计激活 @ConfigurationProperties
创建无参数的存储过程对于 Spring Boot,创建⼀个 MailModuleProperties 类型的 bean,我们可以通过下⾯⼏种⽅式将其添加到应⽤上下⽂中
web开发需要考什么证书⾸先,我们可以通过添加 @Component 注解让 Component Scan 扫描到
image
很显然,只有当类所在的包被 Spring @ComponentScan 注解扫描到才会⽣效,默认情况下,该注解会扫描在主应⽤类下的所有包结构
我们也可以通过 Spring 的 Java Configuration 特性实现同样的效果:
image
只要 MailModuleConfiguration 类被 Spring Boot 应⽤扫描到,我们就可以在应⽤上下⽂中访问 MailModuleProperties bean
我们还可以使⽤ @EnableConfigurationProperties 注解让我们的类被 Spring Boot 所知道,在该注解中其实是⽤
了@Import(EnableConfigurationPropertiesImportSelector.class) 实现,⼤家可以看⼀下
image
激活⼀个 @ConfigurationProperties 类的最佳⽅式是什么?
所有上述⽅法都同样有效。然⽽,我建议模块化你的应⽤程序,并让每个模块提供⾃⼰的@ConfigurationProperties 类,只提供它需要的属性,就像我们在上⾯的代码中对邮件模块所做的那样。这使得在不影响其他模块的情况下重构⼀个模块中的属性变得容易。
因此,我不建议在应⽤程序类本⾝上使⽤ @EnableConfigurationProperties,如许多其他教程中所⽰,是在特定于模块的@Configuration 类上使⽤@EnableConfigurationProperties,该类也可以利⽤包私有的可见性对应⽤程序的其余部分隐藏属性。
⽆法转换的属性
如果我们在 application.properties 属性上定义的属性不能被正确的解析会发⽣什么?假如我们为原本应该为布尔值的属性提供的值为 'foo':
image
默认情况下,Spring Boot 将会启动失败,并抛出异常:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论