1、Spring框架 (1)Core Container 核心容器包含Core、Beans、Context和Expression Language模块 (2)Data Access/Integration 包含JDBC、ORM、OXM、JMS和Transaction模块 (3)Web 上下文模块简历在应用程序上下文模块之上,简化了多部分请求以及将请求参数绑定到域对象的工作 (4)AOP 面向切面编程,为基于Spring的应用程序中的对象提供了事务管理服务 (5)Test 支持使用JUnit和TestNG对Spring组件进行测试
2、环境搭建 (1)安装GitHub (2)安装Gradle
1、DefaultListableBeanFactory (1)XmlBeanFactory继承自DefaultListableBeanFactory。DefaultListableBeanFactory是Spring注册和加载bean的默认实现 (2)XmlBeanDefinitionReader读取XML配置文件
2、类 (1)AliasRegistry:定义对alias的简单增删改等操作 (2)SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现 (3)SingletonBeanRegistry:对单例的注册及获取 (4)DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现 (5)HierarchicalBeanFactory:继承BeanFactory,在基础功能上增加了对parentFactory的支持 (6)BeanDefinitionRegistry:对BeanDefinition的各种增删改操作 (7)FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对BeanFactory的特殊处理功能 (8)ConfigurableBeanFactory:提供配置Factory的各种方法 (9)ListableBeanFactory:根据各种条件获取bean的配置清单 (10)AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能 (11)AutowireCapableBeanFactory:提供创建bean、自动注入、初始化以及应用bean的后处理器 (12)AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory,并对接口AutowireCapableBeanFactory实现 (13)ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口等 (14)DefaultListableBeanFactory:主要是对Bean注册后的处理 (15)ResourceLoader:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的Resource (16)BeanDefinitionReader:主要定义资源文件读取并转换为BeanDefinition的各个功能 (17)EnvironmentCapable;定义Environment方法 (18)AbstractBeanDefinitionReader:对EnvironmentCapable、BeanDefinitionReader类定义的功能进行实验 (19)DocumentLoader;定义从资源文件加载到转换为Document的功能 (20)BeanDefinitionParserDelegate;定义解析Element的各种方法
3、XmlBeanFactory (1)通过继承自AbstractBeanDefinitionReader中的方法,来使用ResourceLoader将资源文件路径转换成为对应的Resource文件 (2)通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件 (3)通过实现接口BeanDefinitionDocumentReader对DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析
4、对不同来源的资源文件都有相应的Resource实现:文件(FileSystemResource)、Classpath资源(ClassPathResource)、URL资源(UrlResource)、InputStream资源(InputStreamResource)、Byte数组(ByteArrayResource)等
5、获取XML的验证模式 (1)getValidationModeForResource方法会去对应资源的验证模式 (2)XSD和DTD
6、解析及注册BeanDefinitions (1)参数doc通过loadDocument加载转换处出来,应用了面向对象中单一职责的原则,将逻辑处理委托给单一的类进行处理,这个逻辑处理类是BeanDefinitionDocumentReader (2)BeanDefinitionDocumentReader真正的类型是DefaultBeanDefinitionDocumentReader,提取root,以便再次将root作为参数继续BeanDefinition的注册
执行逻辑 (1)首先委托BeanDefinitionDelegate类的parseBeanDefinitionElement方法进行元素解析,返回BeanDefinitionHolder类型的实例bdHolder,经过这个方法后,bdHolder实例已经包含我们配置文件中配置的各种属性 (2)当返回的bdHolder不为空的情况下若存在默认标签的子节点下再有自定义属性,还需再次对自定义标签进行解析 (3)解析完成后,需要对解析后的bdHolder进行注册,同样,注册操作委托给了Bean DefinitionReaderUtils的registerBeanDefinition方法 (4)最后发出响应事件,通知想关的监听器,这个bean已经加载完成了