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)