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