定制自己的springBoot的starter步骤
1.编写一个带有@Configuration注解的类,如果按条件加载可以加上@ConditionalOnClass或@ConditionalOnBean注解
2.在classpath下创建META-INF/spring.factories文件,并在spring.factories中添加
org.springframework.boot.autoconfigure.EnableAutoConfiguretion =\ 上面定义类的全类名
自动装载的配置的原理
1.SpringApplication注册
ConfigurationClassPostProcessor用于解析配置类,下面为注册的主要过程:
- SpringApplication在run方法中调用 createApplicationContext()来创建 AnnotationConfigEmbeddedWebApplicationContext
- 在初始化AnnotationConfigEmbeddedWebApplicationContext时会一并创建 AnnotatedBeanDefinitionReader这个类
- 在初始化AnnotatedBeanDefinitionReader时会调用 AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);来初始化ConfigurationClassPostProcessor
AnnotationConfigUtils注册
ConfigurationClassPostProcessor的
registerAnnotationConfigProcessors方法部分代码示例
注册
ConfigurationClassPostProcessor类的时序图
2.加载解析META-INF/spring.factories下的类为 BeanDefinition的时序图
加载功能的实现主要得益于
ConfigurationClassPostProcessor 是实现了
BeanDefinitionRegistryPostProcessor,所以在
AbstractApplicationContext中调用
postProcessBeanDefinitionRegistry时会调用到
ConfigurationClassPostProcessor,从在在这里开始对META-INF/spring.factories配置的类的进行解析并将它们变为BeanDefinition对象
加载META-INF/spring.factories的主要代码
Mybatis的starter自动装配实现
1.编写一个带有@Configuration注解的类
2.在classpath下创建META-INF/spring.factories文件
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
最后展示一下mybatis的结构图
關鍵字: spring.factories ConfigurationClassPos 为例