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源码深度解析》

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐