spring容器启动-源码分析-AnnotationConfigApplicationContext--this()--1

时间:2021-06-21 20:31:10   收藏:0   阅读:0

前段时间,通过画脑图记录的方式深入分析了一下:spring底层容器的刷新过程,现在拆分为博客,分享一下。后面会附上脑图的原文件,供大家查看。

public class BeanAutowired {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }

}

  

这个是代码入口,基于spring Initalizr,新建一个springboot项目就好。sping会自动引入,相关jar。

重要前言:本源码分析,限于:基于注解的容器刷新,和spingboot没有关系,属于最底层的ioc容器刷新过程。后续,有时间,再写基于springboot的源码分析。

进入源码AnnotationConfigApplicationContext,构造器
	public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
		this();//AnnotationConfigApplicationContext容器无参构造器;======父级GenericApplicationContext();无参构造器。创建this.beanFactory = new DefaultListableBeanFactory();
		register(componentClasses);//注册相关信息
		refresh();//刷新容器。核心
	}

 进入this();
技术图片

 

 

 进入this.reader = new AnnotatedBeanDefinitionReader(this);

技术图片

 

 

 

 进入:this.conditionEvaluator = new ConditionEvaluator(registry, environment, null); 配置基本的环境信息

技术图片

 

 

 进入:AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);注册各个注解模式需要的后置处理器, 默认工厂也是在这里设置的

技术图片

 

 技术图片

 

 进入:

this.scanner = new ClassPathBeanDefinitionScanner(this); 指定bean定义扫描器,@Component注解的支持,就是在这里设置的。



技术图片

 

 至此,AnnotationConfigApplicationContext源码的第二行:this();就分析完了。主要是设置一些基础的功能。后面继续分析

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!