Spring的认识
在2007年,为了是开发更加的便捷,一个基于java语言的开源框架正式发布,叫做Spring。它是一个轻量级java SE(java标准版)/java EE(java企业版本)开发应用框架,目的是简化企业级应用程序开发,在传统的应用程序开发中,一个完整的应用是由一组相互协作的对象组成,开发应用除了业务逻辑之外,最多的就是关注如何使用这些对象协作完成功能,因为业务逻辑开发是不可避免的,所以为了简化开发只能从对象的管理入手,因此Spring就诞生了,它的出现就是为了帮助程序员管理对象的使用与对象之间的依赖。
Spring框架除了帮我们管理对象之外,还提供了通用的日志记录、性能统计、安全控制、异常处理等面向切面的功能,还帮我们管理了数据库事务,提供了一套简单的JDBC访问数据库的实现,可以很好的整合其他的框架,提供了一套自己的Web层框架Spring MVC,可以看出Spring就是一个超级大的集成平台,除了提供自己的功能外,还提供了集成其他技术框架的能力,使得我们可以更加自由的选择使用什么技术来开发。
Spring的思想编程
一切从Bean开始
早起的java还只是一个新兴的编程语言,初期它主要是作用于可以使用java的Applet来开发Web应用,作为浏览器的组件,当时的开发还是基于面向过程开发思想,在OOP思想的飞速发展的时期,Sun公司发布了javaBean 1.00-A规范,早期的javaBean规范针对java,它定义了软件组件模型,简单的java对象不仅能被重用,还可以轻松的构建复杂的应用,不过复杂的应用通常需要事务、安全、分布式等服务支持,所以Sun公司发布了EJB 1.0规范,该规范把java组件的设计理念延伸到了服务器端,并提供了许多必须的企业级服务,不再像javaBean那么简单了,再后来新的编程技术AOP和DI的出现,这些技术为POJO提供了类似于EJB的声明式编程模型。
Spring的设计初心
Spring是为解决企业级应用开发的复杂性而设计,它可以做很多事,但归根到底支撑Spring的仅仅是少许的基本理念,而这些理念最根本的使命是简化开发,其它许多框架也是在为简化开发,但是都是基于其中的一方面,而Spring则是全面的简化java开发。
只要采取的4个关键策略
- 基于POJO的轻量级和最小侵入性编程
- 通过依赖注入和面向切面松耦合
- 基于切面和惯性进行声明式编程
- 通过切面和模板减少样板代码
其主要是:面向Bean、依赖注入DI以及面向切面AOP这三种方式达成
Bean编程
Spring是面向Bean的编程(BOP),Bean在Spring中才是真正的主角。Spring没有Bean也就没有存在的意义了;Spring提供了IOC容器提供配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转也叫作依赖注入,它的基本理念是:不创建对象,但是描述创建它们的方式,在代码中不直接与对象和服务连接,但是在配置文件中描述组件之间的依赖关系。而容器(IOC容器)负责将这些联系在一起。
依赖注入的基本概念
Spring设计的核心org.springframework.beans包,它的设计目的是与javaBean组件一起使用。这个包通常不是由用户直接使用的,而是由服务器将其作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,它允许通过名称创建和检索对象,也可以管理对象之间的关系。
BeanFactory最底层支持两个对象模型
- 单例:提供了具有特定名称的全局共享实例对象,可以在查询是对其进行检索,Sinleton是默认的也是最常用的对象模型。
- 原型:确保每次检索都会创建单独的实例对象,在每个用户都需要自己的对象时,采用原型模式。
Bean工厂的概念是Spring作为IOC容器的基础,IOC则将处理事情的责任从应用程序代码转移到架构。
AOP编程理念
面向切面编程,即AOP,是一种编程思想,它允许程序员对横切关注点或横切典型的职责分界线的行为(日志和事务管理等)进行模块化。
AOP思想可以让我们以声明的方式将功能增强到需要的组件上,优势就是java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用SpringAOP编写的应用程序代码是松耦合的。
AOP编程的常用场景:权限认证、自动缓存处理、事务处理、日志记录、同一错误处理、调试信息输出等。
Spring中的编程思想总结
| Spring思想 | 应用场景 | 归纳 |
|---|---|---|
| OOP | Object Oriented Programming(面向对象编程)用程序归纳总结生活中的一切事物 | 封装、继承、多态 |
| BOP | Bean Oriented Programming(面向Bean编程)面向Bean编程设计程序,解放程序员 | 一切congBean开始 |
| AOP | Aspect Oriented Programming(面向切面编程)找出多个类中有一定规律的代码,开发时拆开,运行时再合并 | 解耦、专人做专事 |
| IOC | Inversion of Control(控制反转)将new对象的动作交给Spring管理,并由Spring保存已创建的对象 | 转交控制权 |
| DI/DL | Dependency Injection(依赖注入)依赖注入Spring不仅保存自己创建的对象,并且保存对象与对象之间的关系。注入即赋值,主要三种方式:构造方法、set方法、直接赋值 | 赋值 |
Spring的系统结构
Spring总共大约有20个模块,有1300对个不同的文件构成。而这些组件分别被整合到核心容器(Core Container)、AOP和设备支持、数据访问以及集成、Web、报文发送、Test,6个模块集合中。
Spring模块架构图:
组成Spring框架的每个模块集合或者模块都可以单独存在,也可以一个或多个模块组合实现,每个模块的组成和功能介绍如下:
核心容器
- 由spring-bean、spring-core、spring-context和spring-expression四个模块组成。
spring-bean和spring-core是核心模块,包含了控制反转和依赖注入。BeanFactory接口时框架的核心接口,BeanFactory容器实例化后并不会自动实例化Bean,只有Bean被使用时,BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。
spring-context模块架构与核心模块之上,他扩展了BeanFactory,为它添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。该模块还提供了许多的企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext是该模块的核心接口,它的超类是BeanFactory,它的不一样在于ApplicationContext容器实例化后会自动对所有的单例Bean进行实例化与依赖关系的装配,使之待于使用。
spring-context-support模块是Spring IOC容器的扩展支持,以及IOC子容器
spring-context-indexer模块是Spring的类管理组件和ClassPath扫描
spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象、同时也方便的可以调用对象方法、操作数组、集合等。
AOP支持
- 由spring-aop、spring-aspects和spring-instrument 3个模块组成。
spring-aop是spring的另一个核心模块,是AOP的主要实现模块,在Spring中,它是以JVM的动态代理技术为基础,然后设计初一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。
spring-aspects模块集成自AspectJ框架,为Spring提供多种AOP实现方法。
spring-instrument模块也是AOP的一个支援模块,主要作用于JVM启动时,生成一个代理类,程序通过代理类再运行时修改类的字节,从而改变一个类的功能,实现AOP功能。
数据访问集成
- 由spring-jdbc、spring-tx、spring-orm、spring-jms和spring-oxm 5个模块组成
spring-jdbc是简化原生jdbc的操作,提供了jdbc模板方式。
spring-tx模块使Spring JDBC事务控制模块,使用Spring框架,通过AOP配置,可以灵活的配置在任何地方
spring-orm模块使ORM框架的支持模块
spring-oxm模块主要提供提个抽象层以支撑OXM,它是将java对象映射成XML数据,和对换映射
spring-jms模块,能够发送和接收信息
Web组件
- 由spring-web、spring-webmvc、spring-websocket和spring-webflux四个模块组成。
spring-web模块使最基础的Web支持,主要建立与核心容器之上,通过Servlet或Listeners来初始化IOC容器。
spring-webmvc模块,这是一个Web-Servlet模块。
spring-websocket模块主要是与Web前端的双向共通讯的协议
spring-wbflux是一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性好。
通信报文
即spring-messaging模块,是从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用。
集成测试
即spring-test模块,主要是为测试通过支持的,毕竟在不需要发布程序到应用服务器的情况下能够执行一些集成测试或者其他测试对于任何企业都非常重要的。
集成兼容
spring-framework-bom模块、解决Spring的不同模块版本不同问题
模块之间的依赖关系

Spring的命名版本
| 描述方式 | 说明 | 含义 |
|---|---|---|
| Snapshot | 快照版 | 尚不稳定、尚处于开发中的版本 |
| Release | 稳定版 | 功能相对稳定,可以对外发行,但是有时间限制 |
| GA | 正式版 | 代表广泛可以稳定版 |
| M | 里程碑版 | 具有一些全新的功能或者具有里程碑意义的版本 |
| RC | 终测版 | 最终测试,即将作为正式版发布 |