参考地址:https://www.cnblogs.com/FraserYu/p/11261916.html

 

在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值

使用 @ConfigurationProperties 配置模块

假设我们正在搭建一个发送邮件的模块。在本地测试,我们不想该模块真的发送邮件,所以我们需要一个参数来「开关」 disable 这个功能。另外,我们希望为这些邮件配置一个默认的主题,这样,当我们查看邮件收件箱,通过邮件主题可以快速判断出这是测试邮件

在 application.properties 文件中创建这些参数:

我们可以使用 @Value 注解或着使用 Spring Environment bean 访问这些属性,是这种注入配置方式有时显得很笨重。我们将使用更安全的方式(@ConfigurationProperties)来获取这些属性

@ConfigurationProperties 的基本用法非常简单:我们为每个要捕获的外部属性提供一个带有字段的类。请注意以下几点:

  • 前缀定义了哪些外部属性将绑定到类的字段上
  • 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
  • 我们可以简单地用一个值初始化一个字段来定义一个默认值
  • 类本身可以是包私有的
  • 类的字段必须有公共 setter 方法

Spring 宽松绑定规则 (relaxed binding)

Spring使用一些宽松的绑定属性规则。因此,以下变体都将绑定到 hostName 属性上:

如果我们将 MailModuleProperties 类型的 bean 注入到另一个 bean 中,这个 bean 现在可以以类型安全的方式访问那些外部配置参数的值。

但是,我们仍然需要让 Spring 知道我们的 @ConfigurationProperties 类存在,以便将其加载到应用程序上下文中( 面试还不知道 BeanFactory 和 ApplicationContext 的区别?)

激活 @ConfigurationProperties

对于 Spring Boot,创建一个 MailModuleProperties 类型的 bean,我们可以通过下面几种方式将其添加到应用上下文中

首先,我们可以通过添加 @Component 注解让 Component Scan 扫描到,再配合AutoWaird

我们还可以使用 @EnableConfigurationProperties 注解让我们的类被 Spring Boot 所知道,在该注解中其实是用了@Import(EnableConfigurationPropertiesImportSelector.class) 实现,大家可以看一下

激活一个 @ConfigurationProperties 类的最佳方式是什么?

所有上述方法都同样有效。然而,我建议模块化你的应用程序,并让每个模块提供自己的@ConfigurationProperties 类,只提供它需要的属性,就像我们在上面的代码中对邮件模块所做的那样。这使得在不影响其他模块的情况下重构一个模块中的属性变得容易。

最新文章

  1. 代码片段添加智能提示,打造一款人见人爱的ORM框架
  2. Maven多环境打包
  3. SPOJ 1811 Longest Common Substring
  4. Tomcat 配置 HTTPS双向认证
  5. OGLplus 0.33.0 发布,OpenGL 的 C 封装库
  6. ML 03、机器学习的三要素
  7. 使用WITH AS 的ROW_NUMBER分页
  8. Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum
  9. ViEmu For VS2010 3.0 解除30天限制的方法
  10. Spring Bean范围 示例
  11. 【Luogu2711】小行星(网络流,最大流)
  12. 【BZOJ1483】【HNOI2009】梦幻布丁
  13. C# 操作Session、Cookie,Url 编码解码工具类WebHelper
  14. Some notes in Stanford CS106A(2)
  15. VUX调用例子
  16. php调用oracle存储
  17. Google Chrome Native Messaging开发实录(一)背景介绍
  18. 一台机子同时启动两个相同版本的tomcat
  19. 编译 php-memcache 扩展时提示Cannot find autoconf
  20. 20154327 Exp9 Web安全基础

热门文章

  1. UVA - 225 Golygons (黄金图形)(回溯)
  2. UVA - 10129 Play on Words(欧拉回路)
  3. MongoDB 删除,添加副本集,并修改副本集IP等信息
  4. Oracle 组函数count()
  5. FTP故障排除
  6. SpringMVC: JSON
  7. Power Tower
  8. JavaScript的运算符、条件判断、循环、类型转换(9.25 第十一天)
  9. Ubuntu Vi指令
  10. Egret Engine 2D - Get Started