美文网首页spring 相关
spring容器(一): 容器创建起点

spring容器(一): 容器创建起点

作者: aix91 | 来源:发表于2019-06-29 21:37 被阅读0次

1. 起点

public class AopDemo {

    static public void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);

        context.getBean(MathCalculator.class).div(4, 2);
    }
}

2. 新建,初始化容器

AnnotationConfigApplicationContext 层级
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
        this();
        register(annotatedClasses);
        refresh();
}
  1. this(): 创建容器,并初始化beanMap
  • 创建BeanFactory
    AnnotationConfigApplicationContext 继承 GenericApplicationContext,在调用AnnotationConfigApplicationContext的构造函数时,会先调用父类的构造函数创建BeanFactory:
    public GenericApplicationContext() {
        this.beanFactory = new DefaultListableBeanFactory();
    }
  • 初始化beanMap
    添加内部管理beans
org.springframework.context.annotation.internalConfigurationAnnotationProcessor,
org.springframework.context.annotation.internalAutowiredAnnotationProcessor,
org.springframework.context.annotation.internalRequiredAnnotationProcessor,
org.springframework.context.annotation.internalCommonAnnotationProcessor,
org.springframework.context.annotation.internalPersistenceAnnotationProcessor,
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor,
org.springframework.context.event.internalEventListenerProcessor,
org.springframework.context.event.internalEventListenerFactory
if (!registry.containsBeanDefinition(CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME)) {
    RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);
    def.setSource(source);
    beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));
}
  1. 初始化自定义类:就是例子中的MainConfig
  • register(annotatedClasses);
BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);
  1. refresh 刷新容器:实例化bean,创建Bean代理都是在这一步

相关文章

  • spring容器(一): 容器创建起点

    1. 起点 2. 新建,初始化容器 this(): 创建容器,并初始化beanMap 创建BeanFactoryA...

  • 2.Spring IoC 容器

    1.Spring IoC 容器 IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象,把它...

  • Spring 学习笔记(二):Spring 容器以及 bean

    Spring 容器 在 Spring 应用中,应用对象生存于 Spring 容器中,Spring 容器负责创建对象...

  • spring 学习02

    Spring 容器 在Spring 应用中,你的应用对象生存在Spring容器中,Spring 容器负责创建对象,...

  • Spring-容器创建的源码分析

    Spring-容器创建的源码分析 Spring容器的refresh()【创建刷新】; 1、prepareRefre...

  • 2.IOC原理分析

    要想使用Spring IOC,必须要创建Spring IOC容器 ? 什么是IOC容器? 所谓的IoC容器就是指的...

  • 3.Spring容器

    这篇文章主要介绍Spring中的容器在Spring中也同样存在容器,而且Spring的容器是负责创建对象,装配be...

  • Spring学习之Spring IoC 容器(BeanFacto

    IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他...

  • Spring(二)IoC 容器

    IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他...

  • Spring 容器

    Spring 容器 创建Bean 管理Bean的生命周期 组装Bean 配置Bean Spring容器是Sprin...

网友评论

    本文标题:spring容器(一): 容器创建起点

    本文链接:https://www.haomeiwen.com/subject/iqnjcctx.html