Spring源码阅读——Core Container(核心容器)
Spring中的Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。Core和Beans模块是框架的基础部分,提供IoC(反转控制)和依赖注入特性。这里的基础概念是BeanFactory,它对Factory模式的金典实现来消除对程序性单利模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。Core 模块主要包...
Spring中的Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。Core和Beans模块是框架的基础部分,提供IoC(反转控制)和依赖注入特性。这里的基础概念是BeanFactory,它对Factory模式的金典实现来消除对程序性单利模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
- Core 模块主要包含Spring框架基本的核心工具类,Spring的其他组件都需要使用这个包里的类。
- Beans模块是所有应用都要用到的,它包含访问配置文件,创建和管理bean以及进行控制反转、依赖注入操作相关的所有类。
- Context模块构建于Core和Beans基础之上
,提供了一种类似JNDI注册器的框架式的对象访问方法,Context继承了Beans的特性,为Spring核心提供了大量扩展,追加了对国际化、事件传播、资源加载和对Context的透明创建支持。 - Expression Language模块提供了一个强大的表达式语言用于在运行时查询和操作对象。
容器的基本用法
bean是Spring最核心的中西,Spring的目的就是让bean成为一个纯粹的POJO。
demo
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myService" class="top.yuyufeng.learn.spring.service.MyService"></bean>
</beans>
调试
public class Demo1Bean {
public static void main(String[] args) {
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring/spring-demo1.xml"));
MyService myService = beanFactory.getBean(MyService.class);
myService.doSomeThing();
}
}
流程分析
首先从表面上看, 使用spring-demo1.xml资源创建了一个BeanFactory,然后从BeanFactory拿出了Bean。试想一下,如果我们去写这个框架,我们会怎么做?
- 读取xml文件,反射生成Bean保存在容器
- 通过Bean的相关信息去容器中查找Bean
现在,我们来看下Spring中的源码:
XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册和加载bean的默认实现。各个类和接口的功能如图所示:
(高清图下载地址:https://download.csdn.net/download/qq_18860653/10479236)
XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,主要用于从XML中取BeanDefinition。增加了XmlBeanDefinitionReader类。
参考文档
《Spring源码深度解析》
更多推荐
所有评论(0)