在一中我们提到了 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();
这也就是容器初始化做的三件事,到目前为止,只做了这三件事。
慢慢往下梳理,不着急