ClassPathXmlApplicationContext源码解析四

来源:互联网 发布:网络交友的利弊 编辑:程序博客网 时间:2024/05/29 19:41

本文引自我的个人博客: sunmingshuai.coding.me

我们回到refresh()方法 继续往下解读 下面这几个方法比较简洁 或者说简单 我们只是简单的列出 就不再作过多解读饿了

                // spring可扩展的另一个实现:BeanPostProcessor 在调用beanClass实例化前后或者调用initMethod方法的前后会调用接口方法                // 较常见的硬编码的BPP:ApplicationContextAwareProcessor,ApplicationListenerDetector                registerBeanPostProcessors(beanFactory);                //国际化                initMessageSource();                //广播                initApplicationEventMulticaster();                //empty                onRefresh();                // 注册listener                registerListeners();

registerBeanPostProcessors(beanFactory)方法是把BeanFactory中声明的BeanPostProcessor的实例加入到beanFactory中 注意此时的BeanPostProcessor并没有成形 还停留在BeanDefinition初级阶段 这个时候我们要通过beanFactory.getBean(name,requiredType)方法获取BeanPostProcessor实例 然后再加入到beanFactory

getBean(name,requiredtype)是个很复杂很重要的方法 后面我们会讲到

component-scan做了些什么:源码解读 文章最后介绍的一个方法registerComponents()有介绍到注册的一些处理注解的BPP
initApplicationEventMulticaster()方法用来注册一个广播器
onRefresh()方法留空 留给字类继承实现
registerListeners() 将相关listener加入到我们上面生成的applicationEventMulticaster