Spring IOC 之 注册 BeanDefinition

获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 BeanDefinitionsspring

  • 首先调用 createBeanDefinitionDocumentReader() 方法实例化 BeanDefinitionDocumentReader 对象
  • 而后获取统计前 BeanDefinition 的个数
  • 最后调用 registerBeanDefinitions() 注册 BeanDefinition

  • 注册 BeanDefinition 的方法 registerBeanDefinitions() 是在接口 BeanDefinitionDocumentReader 中定义

  • 从给定的 Document 对象中解析定义的 BeanDefinition 并将他们注册到注册表中
  • 方法接收两个参数,待解析的 Document 对象,以及解析器的当前上下文,包括目标注册表和被解析的资源

DefaultBeanDefinitionDocumentReader post

调用 doRegisterBeanDefinitions() 开启注册 BeanDefinition 之旅测试

  • 程序首先处理 profile属性,profile主要用于咱们切换环境,好比切换开发、测试、生产环境,很是方便
  • 而后调用 parseBeanDefinitions() 进行解析动做,不过在该方法以前以后分别调用 preProcessXml() 和 postProcessXml() 方法来进行前、后处理,目前这两个方法都是空实现,交由子类来实现

parseBeanDefinitions()3d

  • 最终解析动做落地在两个方法处:parseDefaultElement(ele, delegate) 和 delegate.parseCustomElement(root)

咱们知道在 Spring 有两种 Bean 声明方式:code

  • 配置文件式声明:<bean id="studentService" class="org.springframework.core.StudentService"/>
  • 自定义注解方式:<tx:annotation-driven>
    • 两种方式的读取和解析都存在较大的差别,因此采用不一样的解析方法,若是根节点或者子节点采用默认命名空间的话,则调用 parseDefaultElement() 进行解析,不然调用 delegate.parseCustomElement() 方法进行自定义解析
相关文章
相关标签/搜索