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的值:能按照区域信息…
51.[源码]-Spring容器创建-容器创建完成 12.finishRefresh();完成BeanFactory的初始化创建工作:IOC容器就创建完成: 1).initLifecycleProcessor();初始化和生命周期有关的后置处理器:LifecycleProcessor 默认从容器中找是否有lifecycleProcessor的组件[LifecycleProcessor]:如果没有new DefaultLifecycleProcessor(); 加入到容器: 写一个Lifecycl…
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…
50.[源码]-Spring容器创建-Bean创建完成 11.finishBeanFactoryInitialization(beanFactory);初始化所有剩下的单实例bean: beanFactory.preInstantiateSingletons();初始化后剩下的单实例bean 1).获取容器中的所有Bean,依次进行初始化和创建对象 2).获取Bean的定义信息:RootBeanDefinition 3).Bean不是抽象的,是单实例的,是懒加载: 1).判断是否是Factory…
45.[源码]-Spring容器创建-执行BeanFactoryPostProcessor 5.invokeBeanFactoryPostProcessors(beanFactory);执行BeanFactoryPostProcessor的方法: BeanFactoryPostProcessor:BeanFactory的后置处理器.在BeanFactory标准初始化之后执行的: 两个接口:BeanFactoryPostProcessor.BeanDefinitionRegistryPostPro…
49.[源码]-Spring容器创建-创建Bean准备…
46.[源码]-Spring容器创建-注册BeanPostProcessors 6.registerBeanPostProcessors(beanFactory);注册BeanPostProcessor(Bean的后置处理器)[ intercept bean creation] 不同接口类型的BeanPostProcessor:在Bean创建前后的执行时机是不一样的 BeanPostProcessor. DestructionAwareBeanPostProcessor. Instantiati…
Spring容器的refresh()[创建刷新] 1.prepareRefresh()刷新前的预处理 1).initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法: 2).getEnvironment().validateRequiredProperties();检验属性的合法等 3).earlyApplicationEvents= new LinkedHashSet<ApplicationEvent>();保存容器中的一些早期的事件: 2.obtainF…
Spring容器的refresh 创建刷新:   1-prepareRefresh刷新前的预处理: initPropertySources 初始化一些属性配置,原来是空的,子类自定义的属性设置方法 getEnvironment().validateRequiredProperties();检验属性的合法性 this.earlyApplicationEvents = new LinkedHashSet<>();保存容器中的一些早期的事件 2-obtainFreshBeanFactory();获取…