源码入口
-
ClassPathXmlApplicationContext方法中 去解析资源文件路径 此方法是setConfigLocations();
-
解析完资源路径之后 会去 调用刷新容器的方法 refresh 此方法也是去装配容器需要的处理事务 还有属性之类的此方法中概括所有ioc容器的处理 过程 有11个方法
1:prepareRefresh() 调用容器准备刷新的方法,获取容器的时间,并且设置表示 2:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 此方法是告诉refreshBeanFoctry方法,Bean定义的资源文件从子类refreshBeanFoctry加载进来 3:prepareBeanFactory(beanFactory); 为bean配置容器的特性,如:事件处理器 ,类加载器 4:postProcessBeanFactory(beanFactory);为容器某些子类提供特殊的BeanPost事件(aop) 5:invokeBeanFactoryPostProcessors(beanFactory); 调用所有注册的eanFactoryPostProcessors的Bean 6:registerBeanPostProcessors(beanFactory); 后置通知 用来监听容器触发的事件 7:initMessageSource(); 初始化信息源,和国际化相关 8:initApplicationEventMulticaster() 初始化容器时间传播器 9:onRefresh()调用子类的某些特殊Bean初始化方法 10:registerListeners(); 为传播事件做监听器 11:finishBeanFactoryInitialization 初始化剩下的单例bean 12: finishRefresh初始化容器的生命周期事件处理器,并且发布容器的生命周期 13:如果抛出异常就销毁已创建的Bean 取消refresh 操作 重置容器 14: 无论成功与否必须需要 释放公共资源
3. 点击看obtainFreshBeanFactory方法 主要是关注 refreshBeanFactory()
-
在refreshBeanFactory方法中主要的方法是loadBeanDefinitions 加载bean
-
loadBeanDefinitions方法中最重要的方法是doLoadBeanDefinitions读取Bean的过程
-
doLoadBeanDefinitions这个方法 是在XmlBeanDefinitionReader类中 此方法是把XML文件转换成 DOM对象 解析方法 然后去对Bean定义和解析 把xml文件转成DOM对象的主要方法是doLoadDocument() 启动对Bean定义和解析的方法是registerBeanDefinitions
-
XmlBeanDefinitionReader类中的registerBeanDefinitions继续调用了BeanDefinitionDocumentReader接口的registerBeanDefinitions方法 具体的解析实现过程有实现类DefaultBeanDefinitionDocumentReader完成
-
DefaultBeanDefinitionDocumentReader 实现类中的 registerBeanDefinitions方法 中doRegisterBeanDefinitions(root); 方法 定义规则Bean定义doucment对象 载入元素 其中parseBeanDefinitions()是把配置文件给解析载入到Bean中
-
parseBeanDefinitions 此方法根据xml命名 来去做不同的处理 调用parseDefaultElement方法去适配不同元素的节点 这里我们用processBeanDefinition方法举例子也是最常用的
-
在processBeanDefinition(解析Bean定义资源doucment对象的普通元素)方法中 BeanDefinitionReaderUtils.registerBeanDefinition 此方法向spring IOC容器注册解析得到Bean定义,这是Bean像IOC容器的注册入口
-
registerBeanDefinition此方法将解析的BeanDefinitionHold注册到容器中 此方法把BeanDefinition存入一个map中 key是BeanDefinitionHold的里面的name 也是BeanName 。Value就是BeanDefinitionHold里面的BeanDefinition
-
总体概括三个步骤 定位 加载 注册