您现在的位置是:首页 > 文章详情

spring源码-bean之增强初始化-3

日期:2018-08-16点击:396

一、ApplicationContext的中文意思是“应用上下文”,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为Java EE应用之首选,可应用在Java APP与Java Web中。

二、ApplicationContext相对于XmlBeanFactory做了很多是拓展的功能,而这些拓展的功能,不管是在容器初始化,还是中间需要处理的过程,都做了很大的改善以及深入。

三、先看一下ApplicationContext的继承关系图,了解一下和XmlBeanFactory的区别

注意:这是一张ClassPathXmlApplicationContext的继承关系图,目前是为了更好的呈现,当前bean在加载的时候做的那些事情。

四、可能有人会问,为什么没有DefaultListableBeanFactory的相关属性了呢,这个在源码的讲解部分会细说。

五、源码解析

1)增强性的bean容器初始化实现方式

 public static void main(String[] args) { //增强性的bean容器初始化化 ApplicationContext context = new ClassPathXmlApplicationContext("spring-bean.xml"); }

2)实现过程

 public ClassPathXmlApplicationContext(String configLocation) throws BeansException { this(new String[]{configLocation}, true, (ApplicationContext)null); } public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); //设置需要加载的xml文件 this.setConfigLocations(configLocations); if (refresh) { //容器的整个初始化过程都在这里实现 this.refresh(); } }

3)refresh

 public void refresh() throws BeansException, IllegalStateException { Object var1 = this.startupShutdownMonitor; synchronized(this.startupShutdownMonitor) { //前期准备工作 this.prepareRefresh(); //xml解析过程 ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory(); //beanFactory的准备过程 this.prepareBeanFactory(beanFactory); try { //BeanFactoryPostProcessor接口拓展 this.postProcessBeanFactory(beanFactory); this.invokeBeanFactoryPostProcessors(beanFactory); //注册BeanPostProcessor的实现接口,实际调用在getBean的时候 this.registerBeanPostProcessors(beanFactory); //国际化 this.initMessageSource(); //初始化应用广播器 this.initApplicationEventMulticaster(); //子类应用 this.onRefresh(); //监听部分 this.registerListeners(); //完成初始化 this.finishBeanFactoryInitialization(beanFactory); //完成刷新 this.finishRefresh(); } catch (BeansException var4) { this.destroyBeans(); this.cancelRefresh(var4); throw var4; } } }

六、因为ApplicationContext在做容器初始化的时候做了很多工作,所以我这里会形成一个目录,来讲解剩下的部分。

1)spring源码-增强容器xml解析-3.1

2)spring源码-BeanFactoryPostProcessor-3.2(待续)

 

原文链接:https://yq.aliyun.com/articles/626099
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章