ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
当咱们完成一个ApplicationContext的实例化时就完成了Spring容器的初始化,而AnnotationConfigApplicationContext的构造方法也就是Spring容器的入口。java
// 初始化容器 public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { // 注册 Spring 内置后置处理器的 BeanDefinition 到容器 this(); // 注册配置类 BeanDefinition 到容器 register(annotatedClasses); // 加载或者刷新容器中的Bean refresh(); }
这个构造方法只有三行:this
容器的初始化过程我认为大体分为:code
- 注册内置的BeanPostProcessor的BeanDefinition到容器
- 注册配置类 BeanDefinition 到容器
- 解析配置类
- 初始化全部单例Bean,并注册到容器
咱们来看下AnnotationConfigApplicationContext的类图: 对象
getParentBeanFactory()
方法,使BeanFactory具有了双亲IOC容器的管理功能。getBeanDefinitionNames()
方法(获取容器中全部Bean定义的名称)。用户使用容器时,能够使用转义符"&"来获得FactoryBean自己,若是不加则是获取FactoryBean产生的对象。blog