SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
2020/4/7 17:01:31
本文主要是介绍SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
知识改变命运,撸码使我快乐,2020继续游走在开源界
点赞再看,养成习惯
给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案
常见配置绑定方式
SpringBoot
在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取一个配置参数
也可以将一系列的配置
映射绑定到JavaBean
的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
推荐阅读
示例配置参数
system: config: app-id: hengboy app-secret: yuqiyu@admin 复制代码
上面是一段示例的配置参数,提供给下面的配置绑定方式来使用。
@Configuration方式绑定
当我们需要将一个配置前缀下的参数映射绑定到JavaBean
的属性字段时,我们可以考虑使用@ConfigurationProperties
+ @Configuration
注解组合的方式,使用如下所示:
/** * 系统配置 * * @author 恒宇少年 */ @Configuration @ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX) @Data public class SystemConfig { /** * 系统配置前缀 */ public static final String SYSTEM_CONFIG_PREFIX = "system.config"; private String appId; private String appSecret; } 复制代码
**注意事项:**配置参数与
JavaBean
属性之间的绑定是通过调用JavaBean
属性的Setter
方法来赋值的,所以我们需要提供对应属性字段的Setter
方法。
由于@Configuration
注解被@Component
修饰,所以我们在使用时只需要注入SystemConfig
配置绑定映射类即可,通过Getter
方法来获取对应配置参数的值。
配置扫描路径方式绑定
如果你系统中需要创建的配置映射类较多,而且每一个类都需要交付给IOC
容器进行托管,那么可以考虑使用@ConfigurationPropertiesScan
+ @ConfigurationProperties
注解组合的方式,使用如下所示:
@SpringBootApplication @ConfigurationPropertiesScan public class ConfigureBindingAwayApplication { public static void main(String[] args) { SpringApplication.run(ConfigureBindingAwayApplication.class, args); } } 复制代码
我们首先需要在XxxApplication
应用程序启动类上添加@ConfigurationPropertiesScan
注解,表示我们需要使用自动扫描的方式来注册配置映射类
,注解配置参数如下所示:
- value:配置扫描的基础
package
,与basePackages
作用一致,通过数组的形式来接收配置。 - basePackages:配置扫描的基础
package
。 - basePackageClasses:配置基础扫描类,会将每一个扫描类所处于的
package
作为扫描基础package
。
当我们在使用
@ConfigurationPropertiesScan
注解时,如果不进行自定义扫描路径,默认使用SpringBoot
应用程序扫描的packages
。
使用这种方式我们配置映射类
就不再需要添加@Configuration
注解了,这是因为我们在使用@ConfigurationPropertiesScan
注解时,会通过@Import
方式来引用配置映射类
的注册实现,详见:org.springframework.boot.context.properties.ConfigurationPropertiesScanRegistrar#registerBeanDefinitions
,配置映射类如下所示:
/** * 系统配置 * * @author 恒宇少年 */ @ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX) @Data public class SystemConfig { /** * 系统配置前缀 */ public static final String SYSTEM_CONFIG_PREFIX = "system.config"; private String appId; private String appSecret; } 复制代码
构造函数方式绑定
在上面的两种方式都是通过Setter
方法来进行映射字段的赋值,而构造函数
绑定方式是通过构造函数来进行赋值的,我们只需要在配置映射类
上添加@ConstructorBinding
注解并提供对应的构造函数即可,使用方式如下所示:
/** * 系统配置 * * @author 恒宇少年 */ @ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX) @ConstructorBinding @Getter public class SystemConfig { /** * 系统配置前缀 */ public static final String SYSTEM_CONFIG_PREFIX = "system.config"; public SystemConfig(String appId, String appSecret) { this.appId = appId; this.appSecret = appSecret; } private String appId; private String appSecret; } 复制代码
在之前我也写过一篇关于构造函数映射配置参数的问题,详情访问:@ConstructorBinding注解的使用
第三方类绑定
如果我们需要将配置参数映射绑定到第三方依赖内提供的JavaBean
,我们该使用什么方式呢?由于接收参数的类并不是我们自己编写的,所以没有办法对.class
文件源码进行修改。
这时我们可以将第三方提供的JavaBean
交给IOC容器
托管,然后结合@ConfigurationProperties
注解来映射绑定配置参数,使用方式如下所示:
@Bean @ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX) public SystemConfig systemConfig() { return new SystemConfig(); } 复制代码
这种方式也需要第三方提供的
JavaBean
有映射字段的Setter
方法,否则无法进行赋值。
我们知道通过@Bean
注解修饰的方法,会将方法的返回值加入到IOC容器
内,那我们在使用配置时,直接注入配置映射类
就可以了。
总结
上面这几种配置绑定方式都遵循OOP
实现,当然如果你只需要获取一个配置参数,使用@Value
也是一个好的选择,没有更好,只有更合适,根据每一种绑定方式的特点合理的选择一个合适业务的方式。
这篇关于SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript编程
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript
- 2024-12-26JS编程入门指南:从零开始学习JavaScript
- 2024-12-25Java编程面试题详解与解答
- 2024-12-25TS基础知识详解:初学者必看教程
- 2024-12-252024面试题解析与攻略:从零开始的面试准备指南
- 2024-12-25数据结构与算法学习:新手入门教程
- 2024-12-25初学者必备:订单系统资料详解与实操教程
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南