【Spring原理、源码一】Spring Framework总览

一、特性总览

1. 核心特性

IOC容器、AOP、Spring事件、资源管理、国际化、校验、数据绑定、类型装换、Spring表达式。其中数据绑定是指外部的一些数据和内部的POJO进行绑定,通过getter、setter方法进行转换,其中一些复杂的装换需要通过类型装换实现。

2. 数据存储

JDBC(是应用程序和关系型数据库交互的通道或者说客户端)、事务抽象、DAO支持、ORM、XML编列(编列类似序列化)

3. web技术

Web Servlet技术栈:SpringMVC(依赖servlet引擎)、WebSocket

Web Reactive技术栈:SpringWebFlux(可以依赖servlet引擎、也可以依赖Netty的引擎)、WebSocket、WebClient

4. 框架整合

远程调用(无论是HTTP还是Hession调用,Dubbo、Thrift都是基于Hession协议,都可以通过Spring统一的API整合使用)、Java消息服务(不包括Kafka、RabbitMQ)、Java连接架构、Java管理扩展、Java邮件客户端、本地任务(单机版、进程内)、本地调度(单机版、进程内)、缓存抽象、Spring测试

5. 测试

模拟对象(Mock Object,单元测试中使用)、TestContext Framework(集成测试使用)、SpringMVC Web 服务端测试、Web客户端测试

二、Spring版本特性

Spring1.X依赖Java1.3,因为从1.3开始API支持动态代理,这是AOP实现的基础。

Spring3.X依赖Java5,因为从Java5开始提供注解支持,Spring引入大量注解。

Spring boot 1.X是基于Spring4.X、Spring boot 2.X是基于Spring5.X。

三、相关问题

1. 什么是 spring framework?

      spring framework是一款开源的开发框架,其提供丰富地模块化组件,可以灵活地选配适合自己项目的组件,通过这些组件提供的丰富功能快捷简单地构建自己的Java应用。几乎是Java开发中所有需要的功能,spring framework都能提供。其核心是IOC容器,这是对IOC模式的一种具体实现,结合DI构建起整个框架的基础。spring framework也是spring生态中其它服务的基础,比如spring boot、spring cloud的基础都是spring framework。

2. spring framework 有哪些模块?

      spring framework有22个模块,可以到spring的github看到所有的组件,如下所示

【Spring原理、源码一】Spring Framework总览_第1张图片【Spring原理、源码一】Spring Framework总览_第2张图片

      其比较重要的模块有:core、beans、aop、context、jdbc、orm、web、webmvc等。

      其中core是spring最基础的模块,实现了资源的管理、泛型的处理以及一些其它的工具类,其它组件大量使用该工具模块,我们也可以在自己的Java项目中直接使用这里提供的工具类;

       beans实现了IOC模式,基本IOC容器的实现是在这一部分,实现了依赖的查找、注入操作;传统的EJB引入了依赖查找的方式来实现IOC模式,其提供依赖的查找表,需要加载依赖时通过该表查找到所需的依赖项并加载,而spring实际上两种方式都有使用,尤其是其实现了依赖注入的方式,由容器来管理依赖项并在组件组要时注入,各个组件不需要自己主动查找加载。

       aop是spring基于Java代理Proxy实现的面向切面编程,spring还整合了aspects的aop方式,这是单独的一个模块aspects;如果说基于BeanFactory的IOC容器是基础版,那么context就是高阶版的IOC容器,我们常用的ApplicationContext等就是在这里提供的,比如常见的@Component注解等都是该模块中的,实际上基础的IOC容器不提供注解的驱动方式;

       jdbc是spring整合封装了jdbc的api,实现对关系数据库的操作;orm是spring用于整合其它orm框架的api,比如mybatis、hibernate等,其实这些框架都是基于相同的orm协议;

       web是使用spring进行web开发时的基础工具提供组件;webmvc是spring提供的用于web开发的mvc实现。

3. spring framework的优势和不足是什么?

       这个开放性的问题比较难回答,尤其是其不足之处,在后面的学习中不断思考,逐步回答。

       目前学习了IOC容器相关的一些知识,可以作一些关于IOC容器的回答。spring framework中的IOC容器相较于传统的IOC实现,不但实现了依赖查找,并且实现了更加方便的依赖注入。

你可能感兴趣的:(spring)