Spring 是 2003 年兴起的轻量级(相对 EJB 而言) Java 开源框架。
Spring 架构图:
Core Container:这个是整个框架的基础部分,提供了 IoC、依赖注入,这里最核心的概念就是 BeanFactory。
- Core:这里主要提供了 Spring 框架基本的核心工具类,Spring 中的其他组件都需要用到这个包里边的类,它是其他组件的核心,如果有需要,我们也可以在自己的项目中单独引用 core 这个模块。
- Beans:IoC 核心的东西都在这个模块,包括 Bean 的创建和管理、配置文件的访问等等。
- Context:这个模块构建于 Core 和 Beans 之上,提供了诸多扩展功能,例如事件、国际化等。
- SpEL:这个提供了强大的表达式语言,可以在代码运行的时候去查询和操作对象。
Data Access/Integration:这个模块主要包含了 JDBC、ORM、OXM、JMS、Transaction 这些模块。
- JDBC:这个模块提供了一个 JDBC 的抽象层,这个 JDBC 抽象层可以消除冗长的 JDBC 代码,自动解析各个数据库厂商的错误代码。
- ORM:对象关系映射,常见的 MyBatis、JPA、Hibernate 等都属于 ORM 框架。Spring 中的 ORM 框架为这些数据库框架提供了一个交互层,原本利用这些数据库框架操作数据库的时候,不同的框架写法不同,以事务为例,不同框架对于数据库事务的处理方式肯定是不同的。Spring ORM 框架就把这些通用的操作给封装起来了,以事务为例,以后无论使用哪个数据库框架,都可以通过几个简单的注解来添加事务。
- OXM: 这个模块提供了对Object/XML映射实现的抽象层,这个模块的映射实现包括JAXB、XML Beans等。
- JMS: Java Messaging Service,封装了一些消息中间件的操作。
- Transaction:事务处理。这个模块支持编程式事务和声明式事务。Spring 中的 Tx 实质上是定义了一套规范,任何开发者都可以为之提供自己的实现,所以
@Transaction注解不仅可以加在关系型数据库上,也可以添加在消息中间件上。
Web:这个模块主要是提供了Web开发的相关支持。
- WebSocket:全双工通信工具。传统的 HTTP 通信,只能是客户端发送消息给服务端,服务端给客户端响应,服务端是无法直接推送消息给客户端的。但是在具体的项目实践中,我们往往需要服务端主动给客户端推送消息,JavaEE里边从 Servlet3 开始是支持 WebSocket的,但是原生的写法比较麻烦,所以 Spring 推出了 WebSocket工具,借此可以简化 WebSocket 开发。
- Web:支持Web开发的一些基础特性,如文件上传、监听器等等。
- Servlet:一般就是我们常说的SpringMVC。
- Porlet:提供了Porlet环境以及Servlet模块的MVC实现。
AOP:面向切面编程。
- Aspects:提供了对AspectJ的集成支持。
- Instrumentation: 这个模块提供了 class instrumettation 支持和 classloader 的实现,使得可以在特定的服务器上使用。
Test:测试模块,支持JUnit和TestNG对Spring组件进行测试。