SpringBoot项目开发技巧一:自动装配

如题所述

第1个回答  2022-06-07

SpringBoot自动装配是springboot重要的功能点。Boot系列、其它框架与Boot的整合很多是基于自动装配的。 我们在写SpringBoot项目时,Maven的pom依赖能看到很多的starter 都是基于自动装配的

自动装配的原理 网上已经有很多的讲解了,这里不再冗余了。

ProviderConfigration

@Configuration注解在类上表示此类为自动装配类。@Bean通常与@Configuration 一起使用,将方法的返回值注入到spring的bean容器中

@Bean 注解的方法是将方法名做为beanName。上面ProviderProperties这个Bean 在spring容器中的beanName为providerHpProperties(作者工作中踩过这个坑)

@ConditionalOnProperty 不讲解。SpringBoot有很多的@ConditionalXXX 实现条件式注入bean。感兴趣的可以下去了解一下

@ConfigurationProperties 将配置文件的符合规则的key 对应的映射到文件中。

prefix :前缀

ignoreInvalidFields :配置true时不能被正常解析的属性会忽略,spring正常启动。默认为false,解析失败时报错。简单来说就是类型不匹配。

ignoreUnknownFields:配置true时属性未找到时会忽略,spring正常启动。默认为false,未找到时报错。简单来说就是没找到。

对应的配置文件

此时我们已经通过自动装配的方式向Spring的bean容器中注册了两个bean,分别为:ProviderProperties、ProviderSwitch

使用和其它bean一样,@Autowired即可。

如果你写的自动装配类是用于本项目的。那么需要注意@Configuration注解的类需要在scanBasePackages扫包的路径内,否则spring无法加载到自动装配类。更别谈自动装配了(如果在spring.factories文件中配了,可以不用扫包操作。见下文)。

很多时候我们需要编写像SDK这样供外界系统使用的包。我们又想最小程度上减轻引入方的配置(不想让三方去添加扫包操作),那么此时自动装配就起到了关键性的作用(SpringBoot很多的starter都是这样)。下面来说一下具体的流程

在resources目录下创建META-INF/spring.factories文件。

文件结构key,value的形式。key为EnableAutoConfiguration(因为我们这章将的是自动装配),value为我们编写的Configration类全路径

SPI文件有很多的扩展点(很多的配置项key),不在一一叙述。可以在idea中直接搜索spring.factories,可以看到有很多。

SpringBoot在启动中会找到Path下面的所有spring.factories文件,并使用SpringFactoriesLoader将文件加载解析为K,V的形式。

在按照key分发至对应的扩展点,将配置的value(就是class全路径)加载解析到Spring中,实现SPI。

在我们完成了以上几步后,我们的sdk包中的自动装配就完成啦。三方引入时也不用扫包啦。

偷偷告诉大家:@Configuration 可以和 @ComponentScan一起使用,如下:

这样com.hp.config包及子目录 也会被spring扫描到。作为一个SDK 既不用三方去扫包,又可以自己扫描一些特定包,岂不是美哉!

在引入了以下依赖后

直接mvn package 命令后,在target目录下可以找到以下文件

将spring-configuration-metadata.json 拷贝到resources的META-INF目录下。

之后在编写配置文件的时候就会有提示,如下

作为一个sdk包,三方在使用的时候一定会对你竖起大拇指的。心想:这个人真强!

好的以上就是分享的内容啦。希望大家看了后会有收获,对编码上会有帮助!

11点了,该睡觉了。

对了,今天三妹说我有点小帅(我老婆,我是二哥她是三妹)!哈哈哈!今晚睡觉怕是要笑出声了 QAQ

相似回答