SpringBoot提供了很多的Starter场景启动器,开发过程中可以使用这些场景启动器,如(AOP、JPA等等)。
但是有的时候某些业务需求使用启动器时,SpringBoot还无法满足开发所需的场景,那么就可以自定义Starter场景启动器。
源码如下,以Web Mvc Auto Configuration启动器为例。
将需要启动就加载的自动配置类,在META-INF/spring.factories配置规则可以参考/META-INF/spring.factories。
官方命名:
前缀:“spring-boot-starter-”
模式:spring-boot-starter-模块名
举例:spring-boot-starter-web,spring-boot-starter-actuator,spring-boot-starter-jdbc
自定义命名:
后缀:“-spring-boot-starter”
模式:模块名-spring-boot-starter
举例:mybatis-spring-boot-starter
创建一个SpringBoot项目工程【boot_starter】,如图3.5所示。
图3.5
在当前工程resources目录下创建META-INF/spring.factories,如图3.6所示。
META-INF/spring.factories文件中编写(可参考\META-INF\spring.factories配置文件)
图3.6
在spring.factories文件中配置如下所示:
在当前工程com.boot.starter.boot_starter.cofig包下创建SpringbootMyAutoConfigure类与ConverterServcie类,如图3.7所示。
图3.7
在SpringbootMyAutoConfigure类中用于在容器中注入一个自动配置的业务逻辑类。
在ConverterServcie类自定义自动配置的业务逻辑以将一个字符变大变小为例。
将当前工程中无关联的包与文件删除如(.mvn,test,.gitignore,HELP.md,mvnw,mvnw.cmd)删除,如图3.8所示。
图3.8
在将pom.xml配置文件中的无用相关的项目坐标删除,留下与关联的坐标如下所示。
点击IDEA工具右边“Maven”按钮中的“install”按钮,打包即可如图3.9所示。
图3.9
打包完成如3.10所示。
图3.10
再次创建一个SringBoot工程用于加载自定义的Starter如图3.11所示。
图3.11
在当前工程【boot_starter_test】中的pom.xml中加入自定义Starter工程的坐标值如下所示。
在当前工程下com.boot.starter.test.boot_starter_test.controller的目录创建TestStarterContrller类如下所示。
启动当前工程,并在浏览器上执行请求地址http://localhost:8080/getString?s=a,效果如图3.12所示。
图3.12
配置文件自动提示:
在工程【boot_starter】中config目录创建ConverterServcieProperties类,如图3.13所示。
图3.13
ConverterServcieProperties类编写配置文件的提示信息。
在ConverterServcie中追加上过时注解@Deprecated,如图3.14所示。
图3.14
创建NewConverterServcie类,如下所示。
SpringbootMyAutoConfigure加载ConverterServcieProperties配置类如下所示。
点击IDEA工具右边“Maven”按钮中的“install”按钮,打包即可,如图3.15所示。
图3.15
打包完成如图3.16所示。
图3.16
实现自动提示
在工程【boot_starter_test】中的application.properties配置文件输入my就是自动提示自定义的starter的配置如图3.17所示。
图3.17
本章学习了外部配置加载顺序是如何加载的,以及Starter源码解析相关的注解的描述与使用,如启动指定类ConfigurationProperties功能;如何将配置文件中对应的值和HttpEncodingProperties绑定起来;如何把HttpEncodingProperties加入ioc容器中,如何自定义一个Starter,创建一组件方便于工作中特殊条件时需要的组件。
1.自定义一个Starter的规则是什么?
2.注解@AutoConfigureAfter和@ConditionalOnMissingBean是什么含义,能干什么事情?
3.描述自动配置的原理?
4.什么是SpringBootStater?
5.SpringBoot还提供了其他的哪些Starter Project Options?