• spring源码阅读之ioc


    1.spring容器的refresh(创建刷新)
    1.1 preparerefresh刷新的预处理
    1.1.1 initpropertiesSources() 初始化一些属性设置,一般子类自定义个性化的设置
    1.1.2 getEnvironment().validateRequiredProperties();校验属性的合法性
    1.1.3 this.earlyApplicationListeners = new LinkedHashSet<>(this.applicationListeners);存储预刷新的容器监听器
    1.2 obtainFreshBeanFactory(); 获取bean工厂
    1.2.1 refreshBeanFactory 刷新(创建)bean工厂
    (1)this.beanFactory = new DefaultListableBeanFactory() 创建bean工厂对象
    (2)设置id
    1.2.2 getBeanFactory() 返回刚才GenericApplicationContext创建的beanfactory对象
    1.3 prepareBeanFactory 为1.2获取的bean工厂设置属性
    1.3.1 设置beanfactory的类加载器和支持表达式解析器
    1.3.2 添加部分BeanPostProcessor【ApplicationContextAwareProcessor】
    1.3.3 设置忽略自动装配的接口 【EnvironmentAware 】......
    1.3.4 注册可以自动装配的接口 我们可以在任何组件自动注入
    BeanFactory,ApplicationContext
    1.3.5 设置beanPostProcessor【ApplicationContextAwareProcessor】
    1.3.6 添加编译时的AspectJ
    1.3.7 给bean工厂注册一些能用的组件
    Environment【ConfigurableEnvironment】
    SystemProperties【Map<String, Object>】
    getSystemEnvironment【Map<String, Object>】
    1.4 postProcessBeanFactory(beanFactory) benafactory准备完成后进行的后置处理工作
    子类通过重写这个方法来在bean工厂创建并预准备完成后做进一步的设置
    =================================以上是beanFactory的创建以及预准备的工作=========================================
    1.5 invokeBeanFactoryPostProcessors(beanFactory) 执行BeanFactoryPostProcessor beanfactory的后置处理器,在beanfactory标准初始化之后执行的
    两个接口 BeanFactoryPostProcessor BeanDefinitionRegistryPostProcessor
    1.5.1 执行invokeBeanFactoryPostProcessors方法
    先执行BeanDefinitionRegistryPostProcessor
    (1)获取获取所有的BeanDefinitionRegistryPostProcessor
    (2)优先级排序(以实现PriorityOrdered,Ordered,没实现排序接口的顺序 执行)
    再执行BeanFactoryPostProcessor
    流程与上述基本一致
    1.6 registerBeanPostProcessors(beanFactory); 注册bean的后置处理器(拦截bean的创建过程)
    过程与1.5及其类似
    1.7 initMessageSource(); 初始化MessageSource,做国际化,消息绑定和消息解析功能
    1.7.1 获取bean工厂
    1.7.2 看容器中是否有id为messegeSource的bean(可以按照区域信息获取国际化配置文件中的key值)
    无则初始化一个默认的DelegatingMessageSource赋值
    1.7.3 注册进容器,以后其他组件可以随时注入使用
    1.8 初始化事件派发器
    1.8.1 获取bean工厂
    1.8.2 从容器中获取是否有id为applicationEventMulticaster的组件(也就是我们自定义的个性化事件组件),如果有则赋值注册
    1.8.3 如果没有则初始化一个默认的SimpleApplicationEventMulticaster并注册进容器,以后其他的组件可以随时注入使用
    1.9 onRefresh 留给子容器(例如可以多加载一些组件等)
    1.10 registerListeners
    1.10.1 获取容器中的所有的ApplicationListener
    1.10.2 将每个监听器添加到事件派发器中
    1.10.3 派发之前步骤所产生的事件
    1.11 finishBeanFactoryInitialization 初始化剩下的单实例bean

  • 相关阅读:
    黎活明给程序员的忠告
    servlet单实例多线程模式
    Servlet 获取多个参数
    Java Servlet学习笔记(四)Servlet客户端Http请求
    JavaWeb 后端 <二> 之 Servlet 学习笔记
    Servlet 规范笔记—基于http协议的servlet
    Servlet 规范笔记—servlet概念及结构
    看懂UML类图和时序图
    hibernate中的事务管理是怎么概念?
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
  • 原文地址:https://www.cnblogs.com/huqingan/p/11762977.html
Copyright © 2020-2023  润新知