文章目录
- 总结
- 扩展点
- 注意点
总结
- 第一篇,以图示的方式展示了spring启动流程,其内容较多,图示过于庞大,不利于阅读,作者画图水平确实有限,望读者见谅
- 前10篇都是在讲解一件事,spring的BeanDefinition管理(解析,生成,注册)
- 此外本文以AnnotationConfigServletWebServerApplicationContext作为refresh方法的对象,其既包含xml BeanDefinition处理,也包含注解BeanDefinition处理
- 其中xml的处理由XmlBeanDefinitionReader实现
- 注解的处理由 AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner实现
- 不同的Applicationcontext实现BeanDefinition解析,构建,注册的时机不同,本次分享的时机为invokeBeanFactoryPostProcessors
- invokeBeanFactoryPostProcessors调用了一个核心bean工厂后置处理器ConfigurationClassPostProcessor,其同时也是一个bean定义注册后置处理器
- ConfigurationClassPostProcessor完成了所有的BeanDefinition的注册,同时完成了对@Configuration注解full模式的增强处理
扩展点
常用扩展点 | 作用 |
BeanDefinitionRegistryPostProcessor | 完成自定义bean注入 |
BeanFactoryPostProcessor | 获取到bean工厂 ,具备自定义bean注入,修改beanfactory等能力 |
ImportSelector | 通过定义一个数组完成BeanDefinition的注册,只能定义,不可以随意修改BeanDefinition |
ImportBeanDefinitionRegistrar | 完成自定义的BeanDefinition注册,可随意修改BeanDefinition |
注意点
- full模式下 @bean注解的方法获取的是同一个实例
- lite模式下 @bean注解的方法获取的不是同一个实例