Spring启动过程(概括)
Spring在BeanFactory基础上提供了一些列具体容器的实现,其中AnnotationConfigApplicationContext是一个用来管理注解bean的容器,从AnnotationConfigApplicationContext的实现结构图中可以看出:
- AnnotationConfigApplicationContext继承GenericApplicationContext这个通用应用上下文,GenericApplicationContext内部定义了一个DefaultListableBeanFactory实例,GenericApplicationContext实现了BeanDefinitionRegistry接口,所以可以通过AnnotationConfigApplicationContext实例注册bean defintion,然后调用refresh()方法来初始化上下文。
- AnnotationConfigApplicationContext继承AbstractApplicationContext,AbstractApplicationContext提供了ApplicationContext的抽象实现。
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
//1.初始化bean定义读取器和扫描器;
//2.调用父类GenericApplicationContext无参构造函数,初始化一个BeanFactory: DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory()
//3.注册Spring自带的bean,共5个 包括: ConfigurationClassPostProcessor
// AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor
// EventListenerMethodProcessor DefaultEventListenerFactory
this();
// 注册AppConfig, ApplicationContext传入的配置类
//此处只是注册了 @Configuration 注释的配置类,
//register方法 作用是 将对应的Bean生成BeanDefinition,放到spring容器中;容器是一个 map,key是beanName(xml<Bean>标签里 id),value是BeanDefinition
register(annotatedClasses);
//刷新容器,主要完成了 @Component 等相关注解注释的bean的初始化工作,将bean加载到 spring容器管理(与SpringBoot有相似部分)
refresh();// 启动容器
}

本文概括了Spring的启动过程,重点讲解了AnnotationConfigApplicationContext如何在BeanFactory基础上进行初始化,包括BeanDefinition的注册、refresh方法的执行,如BeanFactory的准备工作、BeanDefination信息增强、Bean实例化及Bean的后处理等步骤。建议可通过B站视频或相关博客深入学习。
最低0.47元/天 解锁文章
971

被折叠的 条评论
为什么被折叠?



