Spring Framework框架容器核心源码逐步剖析 (3)

主要功能:实例化在XML配置中实现了BeanFactoryPostProcessor和BeanPostProcessors接口的Bean并执行其回调方法.注意:此时普通的Bean仍然并没有初始化

//实例化并调用XML配置中实现了BeanFactoryPostProcessors接口的的回调 postProcessBeanFactory(beanFactory); invokeBeanFactoryPostProcessors(beanFactory); //实例化并调用XML配置中实现了BeanPostProcessors接口的的回调 registerBeanPostProcessors(beanFactory); //注解:这里在创建完成Bean容器后执行BeanFactoryPostProcessors接口的回调,我们可以在Bean容器初始化完成的时候完成我们自己的业务逻辑(很少用),然后是registerBeanPostProcessors(beanFactory)方法,此方法的官方解释是:"Register bean processors that intercept bean creation(如果存在则注册拦截bean创建的bean后置处理器)" 第六步: 初始化Spring容器的消息源

主要功能: 初始化MessageSource。如果在此上下文中未定义,则使用parent。

// 初始化ApplicationContext的消息源。 initMessageSource(); protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); //判断beanFactory中是否有messageSource的Bean if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) { this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class); // 使MessageSource知道父MessageSource if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) { HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource; if (hms.getParentMessageSource() == null) { //如果没有父MessageSource,则此消息源设置为父MessageSource hms.setParentMessageSource(getInternalParentMessageSource()); } } if (logger.isTraceEnabled()) { logger.trace("Using MessageSource [" + this.messageSource + "]"); } } else { // 如果没有则创建一个默认的DelegatingMessageSource消息源 DelegatingMessageSource dms = new DelegatingMessageSource(); dms.setParentMessageSource(getInternalParentMessageSource()); this.messageSource = dms; beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource); if (logger.isTraceEnabled()) { logger.trace("No '" + MESSAGE_SOURCE_BEAN_NAME + "' bean, using [" + this.messageSource + "]"); } } } 第七步: 初始化Spring容器事件广播器

PS : 在实际项目中我们很少会用到Spring的事件广播器,因为现在都是分布式应用了局部通讯很少使用了 一篇很棒的关于Spring容器的事件讲解 https://juejin.im/post/5a543ceb518825734a748c44

主要功能 : 注册Spring的事件广播器用于广播Spring的内置事件和自定义事件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdjws.html