mica-auto:SpringBoot Starter开发利器

一个完整的 SpringBoot Starter 模块包含以下组件:autoconfigure 模块,包含自动配置代码,并将需要启动就加载的自动配置类,配置在META-INF/spring- factories文件中。starter 模块,它提供对 autoconfigure 模块依赖关系以及类库和常用的其他依赖关系

mica-auto:SpringBoot Starter开发利器

SpringBoot Starter的标准开发流程

一个完整的 SpringBoot Starter 模块包含以下组件:

  • autoconfigure 模块,包含自动配置代码,并将需要启动就加载的自动配置类,配置在META-INF/spring- factories文件中
  • starter 模块,它提供对 autoconfigure 模块依赖关系以及类库和常用的其他依赖关系

其依赖关系如下:

xxx-xxx-project

xxx-xxx-starter

xxx-xxx-autoconfigurer

如果你不想将这两个模块分开,也可以将自动配置代码和依赖关系管理组合在一个模块中

使用Starter的好处

整合了这个模块需要的依赖库 提供对模块的配置项给使用者 提供自动配置类对模块内的Bean进行自动装配

Starter的开发步骤

新建Maven项目,在项目的POM文件中定义使用的依赖 新建配置类,写好配置项和默认的配置值,指明配置项前缀 新建自动装配类,使用@Configuration和@Bean来进行自动装配 新建spring.factories文件,指定Starter的自动装配类

具体的创建流程和代码演示这里就不细讲了,可以参考这篇博文:blog.csdn.net/weixin_3865…

因为我们有更加简洁更加高效的方式

主角是我:mica-auto

功能原理

mica-auto 基于 SpringBoot 配置注解自动生成 SpringBoot 部分配置文件

  • 生成 spring.factories
  • 生成 spring-devtools.properties
  • 生成 FeignClient 到 spring.factories 中,供 mica 中完成 Feign 自动化配置

其原理是扫描引用了@Component注解或者包含@Component的组合注解的类,自动生成相应的配置

基于此特性,我们可以编写自定义Starter时不再需要autoconfigurer模块,因为mica-auto会自动为我们扫描引用了@Configuration的配置类,而该注解是一个包含了@Component的组合注解,并且自动创建META-INF/spring.factories文件,将配置类全路径名自动写入该文件。

如何使用

只需在Starter项目中加入依赖

maven

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-auto</artifactId>
  <version>${version}</version>
  <scope>provided</scope>
</dependency>
复制代码

gradle

annotationProcessor("net.dreamlu:mica-auto:${version}")
复制代码

注意:如果在项目中使用了 Lombok 需将 mica-auto 的依赖放置到 Lombok 后面。

效果展示

mica-auto:SpringBoot Starter开发利器
mica-auto:SpringBoot Starter开发利器
mica-auto:SpringBoot Starter开发利器
mica-auto:SpringBoot Starter开发利器

从idea编译的classes和maven构建的jar包中可以看到mica-auto已经将自动配置类加入到了META-INF/spring.factories

拓展使用

其实mica-auto不只是用于简化Starter的开发,我们日常的开发中经常会遇到多模块项目中,业务模块依赖外部模块,通常他们的包名是不一致的,业务模块要依赖注入外部模块的Component时,主要有四种做法:

  • 自定义一个Starter,依赖该Starter
  • 写@EnableXXX注解,在SpringBoot的启动类引入该注解
  • 在SpringBoot的启动类引入@Import注解,导入配置类
  • 在SpringBoot的启动类引入@ComponentScan注解,手动扫描注入外部模块的Component

这四种方法都对代码有一定的侵入,而mica-auto为每个Component都写入到META-INF/spring.factories, SpringBoot在启动时会根据@SpringBootApplication -> @EnableAutoConfiguration -> @Import 找到
AutoConfigurationImportSelector,在他的selectImports方法中会去扫描META-INF/spring.factories文件,并注入到Spring的bean容器中。

因此,只需要在被依赖的模块中加入mica-auto,就可以在业务模块中愉快地使用外部Component了。

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/soft/24571.html

发表评论

登录后才能评论