一、简述
Spring Boot Starter的实现,需要完成两件事:
1.引入模块所需的相关jar包
2.自动装配模块所需的配置到容器
命名规则
通过官网可知:
前缀固定:spring-boot-starter-xxx,其中xxx是特定类型的应用程序,此命名结构目的在需要查找入门时提供帮助。
例如:
spring-boot-starter-web 基于Spring MVC 构建 Web应用容器。使用 Tomcat 作为默认的嵌入式容器
spring-boot-starter-jdbc 数据库连接模块
自定义命名
以模块名称开头,后缀固定:xxx-spring-boot-starter
例如:mybatis-plus-boot-starter
二、查看springboot启动容器并实现自动装配
首先我们看springboot启动类的注解:
进入该注解便可看到下面的自动装配的注解@EnableAutoConfiguration
@AutoConfigurationPackage:这个注解用于指定自动配置的包。当Spring Boot启动时,它会扫描这个包下的所有类,并自动配置它们。
@Import({AutoConfigurationImportSelector.class}):这个注解用于指定自动导入的配置类。AutoConfigurationImportSelector是一个接口,Spring Boot会根据这个接口来选择需要导入的配置类
由此进入AutoConfigurationImportSelector这个类中可以发现getCandidateConfigurations类获取候选配置中的SpringFactoriesLoader
点击SpringFactoriesLoader进入该类发现META-INF/spring.factories配置文件
由此可看出,对于springboot提供的其他模块配置的装配,其通过文件META-INF/spring.factories来加载,starter关于配置的自动装配
三、现在再类举mybatis-plus-boot-starter实现过程
现在总结上面结论可以看到以下的内容
通过查看spring.factories,其Mybatisplus的配置,
key:org.springframework.boot.autoconfigure.EnableAutoConfiguration
value是:com.baomidou.mybatisplus.autoconfigure.SafetyEncryptProcessor
(values值多个以逗号(“,”)相隔 ,每个value为一个配置类)
现在我们单独抽取一个MybatisPlusAutoConfiguration来看看
@ConditionalOnClass 表示在类存在的情况下进行自动配置
@EnableConfigurationProperties,使@ConfigurationProperties注解生效,把 MybatisProperties注入入到 IOC 容器中。
@AutoConfigureAfter,完成自动配置后实例化这个bean
在进入MybatisPlusProperties类中便可发现该类与yml配置文件的关系
通过查看mybatis-plus-boot-starter,可以发现starter包很简单,没有class文件,只是把starter当做一个相对完整的模块的入口,通过pom文件引入其模块依赖的jar包和配置包,在项目上需要使用此模块时,只需引入这个依赖即可。
四、照葫芦画瓢自定义Spring Boot Starter
使用之后便可直接注入使用该service中的方法了