Spring源码解析——1、容器的基本实现
Spring的结构构成
1、Spring中最核心的两个类:
DefaultListAbleBeanFacory:是Spring注册及加载bean的默认实现
XmlBeanDefinitionReader:整个XML文件读取的大致流程
2、容器的基础XmlBeanFactory
2.1 配置文件封装
Spring的配置文件读取是通过ClassPathResource进行封装的,this.reader.loadBeanDefinitions(resources)是资源加载的真正实现
2.2 加载bean
封装资源文件。当进入XmlBeanDefinitionReader后首先对参数Resource使用EncodedResource进行封装
获取输入流。从Resource中获取对应的InputStream并构造InputSource
Spring用来检测验证模式的办法就是判断是否包含DOCTYPE,如果包含就是DTD,不包含就是XSD
3、获取Document
经过验证模式准备的步骤就可以进行Document加载了,通过类DefaultDocumentLoader执行
3.1 EntityResolver的用法
如果SAX应用程序需要自定义处理外部实体,则必须实现此接口并使用setEntityResolver方法向SAX驱动器注册一个实例。
4、解析及注册BeanDefintions
doRegisterBeanDefinitions真正地开始解析XML
模板方法模式:一个类要么是面向继承的设计的,要么就用final修饰,在 DefaultBeanDefinitionDocumentReader中并没有用final修饰,所以它是面向继承设计的。preProcessXml、postProcessXml这两个方法代码是空的,正是为子类设计的。
4.1 profile属性的用法
首先程序会获取beans节点是否定义了profile属性,如果定义了则去环境变量中去寻找