二 Spring Boot自动配置原理与实践
前言在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深理解 。
本篇是我在实际工作中配置的用于弱口令检查的Starter,能方便嵌入到用户模块中的相关密码接口或方法,对弱口令进行检查并反馈,当然由于是公司内部代码,部分代码省略 。
一、Starter实践1、配置Maven依赖Spring Boot自动化配置主要依赖如下两个包:
- spring-boot-starter:打包starter主要依赖
- configuration-processor:自动化配置主要依赖
@ConfigurationProperties(prefix = "weak.password")public class CheckWeakPasswordProperties {private Boolean enabled = true;/*** 需要检查的URI数组*/private String[] checkUri;/*** 拦截检查的方式 1-interceptor 2-filter 3-aop*/private Integer checkType = 1;private String ip = "127.0.0.1";private String port = "8501";/*** 客户端名称*/private String clientName = "cloud-user";/*** 校验失败信息提示*/private String failureMessage = "密码等级不够";
...// 省略getter/setter方法其中prefix = "weak.password",标明配置文件以“weak.password”开头的字段(对应实体类中的字段)都是需要解析的 。在配置文件中输入前缀后,会进行提示说明

文章插图
3、定义配置类这一步非常关键,是自动装配的核心,通过配置文件配置灵活的参数产生相关的Bean,完成一系列初始化操作,关键的几个注解在这里就不解释了,具体可以看Spring Boot自动配置原理与实践(一) 。
@Configuration@EnableConfigurationProperties(CheckWeakPasswordProperties.class)@ConditionalOnProperty(prefix = "weak.password", name = "enabled", havingValue = "https://tazarkount.com/read/true")public class CheckWeakPasswordAutoConfiguration {public CheckWeakPasswordAutoConfiguration() {}@Bean@ConditionalOnProperty(prefix = "weak.password", name = "checkType", havingValue = "https://tazarkount.com/read/2")public CheckPasswordInterceptor checkPasswordInterceptor(){return new CheckPasswordInterceptor();}@Bean@ConditionalOnProperty(prefix = "weak.password", name = "checkType", havingValue = "https://tazarkount.com/read/2")public CheckPasswordFilter checkPasswordFilter(){return new CheckPasswordFilter();}@Bean@ConditionalOnProperty(name = "weak.password.check-type", havingValue = "https://tazarkount.com/read/2")public CheckPasswordFilterConfig checkPasswordFilterConfig() {return new CheckPasswordFilterConfig();}@Bean@ConditionalOnProperty(prefix = "weak.password", name = "checkType", havingValue = "https://tazarkount.com/read/1")public CheckPasswordInterceptorConfig checkPasswordInterceptorConfig(){return new CheckPasswordInterceptorConfig();}}4、创建spring.factories文件 之前三步所有的操作都已经完成,那么将Starter当引入工程中是如何发现并自动装配的,这就需要spring.factory文件中标明,在resource/META-INF在新建spring.factory文件

文章插图
在该文件中指明AutoConfiguration的全Class路径

文章插图
这样打包的时候就能将spring.factory文件打包,项目启动的时候就会扫描并装配

文章插图
【二 Spring Boot自动配置原理与实践】同时生成spring-configuration-metadata.json文件,其内容就是提供配置文件智能化提示的
{"groups": [{"name": "weak.password","type": "com.yunchuang.password.properties.CheckWeakPasswordProperties","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties"}],"properties": [{"name": "weak.password.check-type","type": "java.lang.Integer","description": "拦截检查的方式 1-interceptor 2-filter 3-aop","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": 1},{"name": "weak.password.check-uri","type": "java.lang.String[]","description": "需要检查的URI数组","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties"},{"name": "weak.password.client-name","type": "java.lang.String","description": "客户端名称","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": "cloud-user"},{"name": "weak.password.enabled","type": "java.lang.Boolean","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": true},{"name": "weak.password.failure-message","type": "java.lang.String","description": "校验失败信息提示","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": "密码等级不够"},{"name": "weak.password.ip","type": "java.lang.String","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": "127.0.0.1"},{"name": "weak.password.port","type": "java.lang.String","sourceType": "com.yunchuang.password.properties.CheckWeakPasswordProperties","defaultValue": "8501"}],"hints": []}二、自定义Starter使用首先引入自定义的Starter包依赖到相关应用中

文章插图
然后在配置文件中打开开关,或者某些条件才能开启自动配置,以我的代码示例举例的话,就是需要指定enabled为true

文章插图
其次可以观察启动的时候相关的Bean是否被自动装配,可以打开debug模式查看日志,或者在idea中查看Endpoints-->Beans-->application,可以看到相关的自动配置启动时加载了,并且相应的Bean也注入了 。

文章插图
最后就是验证是否符合业务逻辑
- 2021年二级建造师市政真题解析,2021二建市政考试题真题及答案5.30
- 2021二建机电试题库及答案解析,2021年二建机电章节题pdf
- 二十几男性脱发-女朋友脱发怎么办
- 切好的土豆放冰箱第三天能用吗 切好的土豆放冰箱第二天能用吗
- 文字版 2017年二级建造师建筑真题及答案,二级建造师例题库
- 二级建造师建筑考试试题库及答案解析,二级建造师例题库
- 二 专升本习题分享
- 晚上发面第二天蒸会酸吗 晚上发面第二天蒸行吗
- 2021年公路实务案例题3答案,2021年233网校二级建造师考试公路工程每日一练
- 大约是爱第二部 大约是爱2tvbwind
