形成IOC并具有良好扩展性的要素 -- 五步
含有基本要素Bean的定义 -- BeanDefinition
- 具体Bean的对象
- Bean的Class
- Bean的ClassName
- Bean的
配置属性及值
对象
Bean的工厂 -- BeanFactory
- 工厂接口,具有获取Bean的方法
- 实现接口的抽象工厂(用于延迟实现获取Bean的方法)
- 具体获取Bean的工厂
解析配置xml的工具 -- BeanDefinitionReader
- Bean资源解析接口
- 实现接口的Bean资源解析抽象类(同样是延迟实现解析方式)
- 具体Bean资源解析类
- ps:(Spring boot其实就是预先将这些配置通过注解的方式率先初始化好了,这里先讲讲xml方式能更好理解起原理)
读取配置的IO -- Resource
- 资源读取的接口
- 用于从某一位置读取资源的加载器,返回用于具体读取的类
- 实现接口的具体读取类,提供读取流
与客户端进行直接交互的环境 -- Context
- 继承Bean工厂接口的环境接口
- 实现环境接口的抽象类(在类中组合使用抽象Bean工厂,实现调用时具体获取到Bean实例)
- 具体实现的环境类(通过对xml解析器的调用与注册Beans到工厂中来实现加载BeanDefinitions)
再来看看Spring的架构
![](https://img.haomeiwen.com/i16447097/73e79604469c2cc2.png)
白话Spring架构
- Spring framework和Java类似,它们都是构建一个数据结构,然后根据这个数据结构去设计它的生存环境,并让它在这个环境中进行一系列活动,与其他个体包括环境进行信息交互。
- 在这个过程中,Bean是主角,而Context就是Bean活动的大环境,Core就是Bean生活下去的必备工具,而其他如AOP、Transaction、Orm、Web、Test这些东西都是为了让bean能活得多姿多彩而实现的功能。
Core Container
- Core主要包含Spring的核心工具类
- Beans包含访问配置文件、创建和管理Bean以及进行IOC/DI操作的相关类
- Context构建在Core和Beans的基础上,其继承了Beans的特性(提供了很多扩展 -- 国际化、事件传播、资源加载等),支持J2EE特性(EJB、JMX等),其中ApplicationContext是重中之重。
- Expression Language 模块提供了表达式语言。用于在运行时查询操纵对象。
Date Access/Integration
- JDBC包含Spring 对JDBC是数据访问进行封装的所有类
- ORM包含关系映射API(JPA、Hibernate、mybatis)的交互层,利用ORM封装包。
- OXM提供对Object/XML映射的抽象层。
- JMS包含制造与消费消息的特性。
- Transaction支持事务管理
Web
- web提供基础web集成特性
- websocket提供长连接抽象层
- Web MVC的实现
- porlet提供potlet与servlet环境的MVC实现
AOP
- AOP包含了主要实现
- Aspects提供AsoectJ集成支持
- Instrument基于 JAVA SE 中的"java.lang.instrument"进行设计的, 应该算是AOP 的一个支援模块, 主要作用是在 JVM 启用时, 生成一个代理类, 程序员通过代理类在运行时修改类的字节, 从而改变一个类的功能, 实现 AOP 的功能。
- messaging模块为集成messaging api和消息协议提供支持
Test
支持使用测试框架对Spring组件的测试
网友评论