Spring源码解析
一、Spring整体架构
- Core Container (核心容器)
Beans (基础概念是BeanFactory),用于访问配置文件、创建和管理bean,以及Ioc 和DI操作相关。
Core:Spring 框架基本的核心工具类。
Context:构建于Core和Beans模块基础之上,继承了Beans的特性,提供了对国际化、事件传播、资源加载和对Context的透明创建的支持。
Expression Language提供强大的表达式语言,用于在运行时查询和操纵对象。 - AOP:面向切面编程的实现,通过定义方法拦截器和切点,将逻辑代码分开。
- Aspects模块提供了AspectJ的集成支持。
- Web:为基于Web应用程序提供上下文。
- Data Access/Integration: 对数据访问进行封装的所有类(JDBC模块)。对象-关系映射API,如Mybatis、Hibernate(ORM模块)
二、XmlBeanFactory 源码分析
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beans.xml"));
Object bean = bf.getBean("test");
- 进入方法XmlBeanFactory查看源码
- 分析doLoadBeanDefinitions方法
- 返回第2部分第一张图截图中的registerBeanDefinitions方法进行解析
- 判断命名空间是默认解析还是使用自定义命名空间解析进行bean的解析。
- 默认命名空间解析
- 追踪到parseBeanDefinitionElement(Element ele)里的下一段代码中
- 到这里便完成了XML文件到GenericBeanDefinition的转换,XML中所有的配置信息都可以在GenericBeanDefinition实例中找到对应的配置信息。GenericBeanDefinition是AbstractBeanDefinition的子类,大部分通用属性都保存在AbstractBeanDefinition中。