SpringBoot学习(2)-创建ConfigurableApplicationContext

  • Post author:
  • Post category:其他


在一中我们提到了 createApplicationContext();但是只是没有详细的分析。

代码中可以发现 通过:

BeanUtils.instantiateClass(contextClass) 创建了实例,但是具体到底创建了什么实例,这里选择了 web环境下的

AnnotationConfigServletWebServerApplicationContext 进行初步的解析:

public AnnotationConfigServletWebServerApplicationContext() {
		this.reader = new AnnotatedBeanDefinitionReader(this);
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}

简单的粘贴了一下构造函数,这里创建的 render跟 scanner在后边有机会再分享,这里想分享的是,

AnnotationConfigServletWebServerApplicationContext 自创建的时候,其父类 都创建可什么,因此,重点看下AnnotationConfigServletWebServerApplicationContext的类图

不出意料,有事一张蜘蛛网,重点分析 集成的类,看下在创建的过程中都干了什么:

ServletWebServerApplicationContext 啥都没干,继续看父类:

GenericWebApplicationContext 啥都没干,继续:

GenericApplicationContext 这里干事了:

public GenericApplicationContext() {
		this.beanFactory = new DefaultListableBeanFactory();
	} 

这里可以看见,给上下文的bean工厂进行了实例化:关于DefaultListableBeanFactory的大值分析在另一篇文章中:

分析到这,结束。

createApplicationContext();

做了三件事:

1.创建new AnnotatedBeanDefinitionReader(this);

2.创建new ClassPathBeanDefinitionScanner(this);

3.创建 new DefaultListableBeanFactory();

这也就是容器初始化做的三件事,到目前为止,只做了这三件事。

慢慢往下梳理,不着急



版权声明:本文为sinat_31396769原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。