Spring源码-03-容器创建

Spring源码-03-容器创建

注解Bean方式

public class AnnotationCtxMain02 {

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(MyCfg02.class);
    }
}
// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
        /**
         * 完成容器的基础组件初始化
         *     - beanFactory
         *         - 实现是DefaultListableBeanFactory
         *     - reader
         *         - 注解Bean读取
         *         - BeanDefinition注入容器
         *     - scanner
         *         - 指定路径扫包
         *         - BeanDefinition注入容器
         */
        this();
        this.register(componentClasses); // Bean读取器读取注解Bean将类信息封装BeanDefinition注入容器 配置类
        /**
         * 到此为止完成了准备工作
         *     - 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
         *     - 向IoC容器中注册了用户配置类
         *
         * 
         */
        super.refresh();
    }

容器创建主要3个步骤

  • 基础组件初始化
  • 注入BeanDefinition
  • refresh

一 基础组件

// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext() {
        super();
        StartupStep createAnnotatedBeanDefReader = this.getApplicationStartup().start("spring.context.annotated-bean-reader.create");
        this.reader = new AnnotatedBeanDefinitionReader(this); // 注解Bean读取器
        createAnnotatedBeanDefReader.end();
        this.scanner = new ClassPathBeanDefinitionScanner(this); // 路径扫包器
    }
// GenericApplicationContext.java
public GenericApplicationContext() {
        super();
        this.beanFactory = new DefaultListableBeanFactory();
    }
// AbstractApplicationContext.java
public AbstractApplicationContext() {
        this.resourcePatternResolver = getResourcePatternResolver();
    }

也就是如图

image

二 注解Bean读取器

传送

完成了2个工作

  • 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
  • 向IoC容器中注册了用户配置类
后置处理器类
ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
InitDestroyAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
EventListenerMethodProcessor
DefaultEventListenerFactory

三 refresh

传送

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容