文章目录

  • ​​总结​​
  • ​​扩展点​​
  • ​​注意点​​

总结

  • 第一篇,以图示的方式展示了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注解的方法获取的不是同一个实例