今天看啥  ›  专栏  ›  minute5

Spring 源码开篇词 - IOC的形成要素

minute5  · 掘金  ·  · 2019-08-31 14:08
阅读 11

Spring 源码开篇词 - IOC的形成要素

##形成IOC并具有良好扩展性的要素 -- 五步

含有基本要素Bean的定义 -- BeanDefinition

  1. 具体Bean的对象
  2. Bean的Class
  3. Bean的ClassName
  4. Bean的 配置属性及值 对象

Bean的工厂 -- BeanFactory

  1. 工厂接口,具有获取Bean的方法
  2. 实现接口的抽象工厂(用于延迟实现获取Bean的方法)
  3. 具体获取Bean的工厂

解析配置xml的工具 -- BeanDefinitionReader

  1. Bean资源解析接口
  2. 实现接口的Bean资源解析抽象类(同样是延迟实现解析方式)
  3. 具体Bean资源解析类
  • ps:(Spring boot其实就是预先将这些配置通过注解的方式率先初始化好了,这里先讲讲xml方式能更好理解起原理)

读取配置的IO -- Resource

  1. 资源读取的接口
  2. 用于从某一位置读取资源的加载器,返回用于具体读取的类
  3. 实现接口的具体读取类,提供读取流

与客户端进行直接交互的环境 -- Context

  1. 继承Bean工厂接口的环境接口
  2. 实现环境接口的抽象类(在类中组合使用抽象Bean工厂,实现调用时具体获取到Bean实例)
  3. 具体实现的环境类(通过对xml解析器的调用与注册Beans到工厂中来实现加载BeanDefinitions)

再来看看Spring的架构

SpringFramework架构图.png

白话Spring架构

  1. Spring framework和Java类似,它们都是构建一个数据结构,然后根据这个数据结构去设计它的生存环境,并让它在这个环境中进行一系列活动,与其他个体包括环境进行信息交互。
  2. 在这个过程中,Bean是主角,而Context就是Bean活动的大环境,Core就是Bean生活下去的必备工具,而其他如AOP、Transaction、Orm、Web、Test这些东西都是为了让bean能活得多姿多彩而实现的功能。

Core Container

  1. Core主要包含Spring的核心工具类
  2. Beans包含访问配置文件、创建和管理Bean以及进行IOC/DI操作的相关类
  3. Context构建在Core和Beans的基础上,其继承了Beans的特性(提供了很多扩展 -- 国际化、事件传播、资源加载等),支持J2EE特性(EJB、JMX等),其中ApplicationContext是重中之重。
  4. Expression Language 模块提供了表达式语言。用于在运行时查询操纵对象。

Date Access/Integration

  1. JDBC包含Spring 对JDBC是数据访问进行封装的所有类
  2. ORM包含关系映射API(JPA、Hibernate、mybatis)的交互层,利用ORM封装包。
  3. OXM提供对Object/XML映射的抽象层。
  4. JMS包含制造与消费消息的特性。
  5. Transaction支持事务管理

Web

  1. web提供基础web集成特性
  2. websocket提供长连接抽象层
  3. Web MVC的实现
  4. porlet提供potlet与servlet环境的MVC实现

AOP

  1. AOP包含了主要实现
  2. Aspects提供AsoectJ集成支持
  3. Instrument基于 JAVA SE 中的"java.lang.instrument"进行设计的, 应该算是AOP 的一个支援模块, 主要作用是在 JVM 启用时, 生成一个代理类, 程序员通过代理类在运行时修改类的字节, 从而改变一个类的功能, 实现 AOP 的功能。
  4. messaging模块为集成messaging api和消息协议提供支持

Test

支持使用测试框架对Spring组件的测试

这儿仅仅只是一个开篇词

之后关于Spring源码解析的文章,我会从Bean的定义与工厂开始讲起,然后依次是Bean配置的读取方式、资源读取与应用环境剖析,敬请期待。



原文地址:访问原文地址
快照地址: 访问文章快照