在分析原理之前,我们不妨试着做一个自己的简易starter(本文假设你是一个有一定经验的开发者)。
父母
groupIdorg.springframework.boot/groupId
artifactId spring-boot-starter-parent/artifactId
version2.1.3.RELEASE/version
/父母
Ps:官方建议命名跳过
是的,你没看错,就是自动注入一个类,一个类,一个类。
packagecom.ws
publicsclasscustomstarter {
publicintadd(inta,intb){
return b;
}
}
效果如下:3360
重点来了:
将以下:添加到spring.factories文件中。
org . spring framework . boot . auto configure . enable auto configuration=com . ws . custom starter
填写我们在这里定义的类的完全限定路径。
怎么用?可以直接将打包的项目导入springBoot项目。
好了,简单的开胃菜做完了,重头戏来了。前面都是小打小闹,就从原理/源码分析开始吧
那么它应该在哪里呢?没错,就是spring.factories文件。
我们定义了一个重要的kv内容,并分配了定义的CustomStarter来启用自动配置,那么这个文件名和路径是从哪里来的呢?我们来看看源代码:
如图,这个类是一个配置加载器,作用如下:
加载spring.factories以保存加载的配置。
SpringFactoriesLoader
EnableAutoConfiguration本质上是一个注释。
让我们转到注释的来源,如图所示。
自动配置导入选择器
根据指定的类对象和类加载,从SpringFactoriesLoader中获取相应的字符串集。
字面意思是返回自动配置的类名。
让我们仔细看看红色部分,这是定义EnableAutoConfiguration :的来源。
启用自动配置源
首先,让我们了解bean definition Registry post processor接口,它继承了BeanFactoryPostProcessor接口。
漫步BeanFactoryPostProcessor接口含义:
这是一个BeanFactory的后处理器,和BeanPostProcessorbean的后处理器不同。它是对BeanFactory的补充,增强的机会是在beanFactory构建之后(目前还没有BeanDefinition)。
这是我们的重点吗?当然不是,这里只是提一下,我们关注的是BeanFactoryPostProcessor的接口方法postprocessbeadefinitionregistry,它是执行自动注入逻辑的入口,如图(直接截图调试器栈,是我太懒了吗?):
这就是结局!游戏结束!
1.BeanFactoryPostProcessor后处理器及其子类Beandefinition注册表后处理器。
Spring.factories文件(以上为个人理解,如不到位请注明,谢谢!)
在修远还有很长的路要走,我会忽上忽下!我们还有很长的路要走!