44.[源码]-Spring容器创建-BeanFactory预准备 @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); // Tell the subclass to refresh th…
51.[源码]-Spring容器创建-容器创建完成 12.finishRefresh();完成BeanFactory的初始化创建工作:IOC容器就创建完成: 1).initLifecycleProcessor();初始化和生命周期有关的后置处理器:LifecycleProcessor 默认从容器中找是否有lifecycleProcessor的组件[LifecycleProcessor]:如果没有new DefaultLifecycleProcessor(); 加入到容器: 写一个Lifecycl…
50.[源码]-Spring容器创建-Bean创建完成 11.finishBeanFactoryInitialization(beanFactory);初始化所有剩下的单实例bean: beanFactory.preInstantiateSingletons();初始化后剩下的单实例bean 1).获取容器中的所有Bean,依次进行初始化和创建对象 2).获取Bean的定义信息:RootBeanDefinition 3).Bean不是抽象的,是单实例的,是懒加载: 1).判断是否是Factory…
48.[源码]-Spring容器创建-初始化事件派发器.监听器等 8.initApplicationEventMulticaster();初始化事件派发器: 获取BeanFactory 从BeanFactory中获取applicationEventMulticaster的ApplicationEventMulticaster: 如果上一步没有配置:创建一个SimpleApplicationEventMulticaster 将创建的ApplicationEventMulticaster添加到Bea…
47.[源码]-Spring容器创建-初始化MessageSource 7.initMessageSource();初始化MessageSource组件(做国际化功能:消息绑定,消息解析): 获取BeanFactory 看容器中是否有id为messageSource的,类型是MessageSource的组件 如果有赋值给messageSource,如果没有自己创建一个DelegatingMessageSource: MessageSource:取出国际化配置文件中的某个key的值:能按照区域信息…
46.[源码]-Spring容器创建-注册BeanPostProcessors 6.registerBeanPostProcessors(beanFactory);注册BeanPostProcessor(Bean的后置处理器)[ intercept bean creation] 不同接口类型的BeanPostProcessor:在Bean创建前后的执行时机是不一样的 BeanPostProcessor. DestructionAwareBeanPostProcessor. Instantiati…
45.[源码]-Spring容器创建-执行BeanFactoryPostProcessor 5.invokeBeanFactoryPostProcessors(beanFactory);执行BeanFactoryPostProcessor的方法: BeanFactoryPostProcessor:BeanFactory的后置处理器.在BeanFactory标准初始化之后执行的: 两个接口:BeanFactoryPostProcessor.BeanDefinitionRegistryPostPro…
49.[源码]-Spring容器创建-创建Bean准备…
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spring的整体思路就是按部就班的读取标签并把数据放入一个map集合中以备后用. ps:以前在看别人写博客时没有很注意,到自己写才发现:博文一长,如何去维持文章的可读性,让读者在阅读时理清整篇文章的脉络实在是一件很难的事情.上篇文章就是如此,我自己回头去读时都难以去顺畅的学习,何况他人,甚是惭愧.也尝试数…
写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Document对象,处理完profile后终于到了标签的解析,这篇文章主要来探究Spring默认标签的解析. 1.4 BeanDefinition的创建 - 处理Spring默认标签 protected void parseBeanDefinitions(Element root, BeanDefiniti…