本系列博客为看书留下的笔记,记录整个spring运行过程。主要分为四个模块,如下

  • spring 启动(ClassPathXmlApplicationContext)
    • 分割传入location路径
    • refresh()模板启动
      • IOC 启动(obtainFreshBeanFactory())
        • 准备容器
          • 销毁之前容器
          • 创建新容器
        • 加载BeanDefinition
          • 初始化XmlBeanDefinitionReader
          • 解析资源文件路径(分别处理location为文件路径、URL路径、等情况,封装成Resource对象)
          • 加载文件内容(根据Resource对象,加载xml的Document对象)
          • 解析xml,封装成BeanDefinition
            • import标签(获得location,继续上述步骤)
            • alias标签(向Map中保存alias->name的关系)
            • bean标签
              • 处理id、name属性(非空、重复等处理)
              • 处理其他属性,保存至BeanDefinition中
              • 处理子标签(propertity、list等)
          • 向IOC中注册BeanDefinition
            • 向IOC中的Map保存beanName->beanDefinition的映射关系
            • 向IOC中的Map保存alias->beanName的映射关系

IOC总结

IOC初始化入口从refresh()方法进入,obtainFreshBeanFactory()完后容器创建和bean定义的加载,其中加载bean定义由ResourceLoader来完成资源文件的定位,DefaultResourceLoader给出它的实现,可以通过类路径、文件路径、URL等方式来定位资源,最后封装成Resource对象,交由IOC处理。BeanDefinitionReader根据Resource来完成bean定义解析和bean定义注册,其中bean定义解析由BeanDefinitionParseDelegate完成并封装成BeanDefinition。然后BeanDefinitionReader完成第二步骤:注册Bean定义,注册的过程就是将其保存在IOC中的HashMap中,后续对bean的操作全都依赖该Map。

  1. DI
  2. AOP
  3. springMVC