Spring框架的功能被分开为多个模块,如下图所示:
一、模块
1. 核心容器
spring-core
:Spring核心模块spring-beans
:Bean容器支持spring-context
:建立在Bean模块基础上,扩展了功能spring-context-support
:支持整合第三方库到Spring上下文spring-expression
:提供表达式语言
2. AOP和Instrumentation
spring-aop
:提供AOP(页面切面编程)支持spring-aspects
:提供AspectJ的集成spring-instrumentation
:提供类植入支持和类加载器的实现
3. 消息
spring-messaging
:消息传递模块
4. 数据访问/集成
spring-jdbc
:提供JDBC抽象层spring-tx
:支持编程和声明式事务管理spring-orm
:为流行的对象关系映射API提供集成层spring-oxm
:提供支持对象/XML映射实现的抽象层spring-jms
:用于生产和消费消息的功能
5. Web
spring-web
:提供基本的面向Web的集成功能spring-webmvc
:用于Web应用程序的模型-视图-控制器(MVC)和REST Web Services实现spring-websocket
:提供Web Socket的支持
6. 测试
spring-test
:支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试
在使用Maven或者其他构建工具管理项目时,可以选择性地添加Spring的依赖,使用什么或能就添加什么依赖。
7. 使用场景
7.1 典型的完整的Spring Web应用程序
这是Spring的完整使用案例,基于Tomcat Servlet容器,所有定制的业务逻辑都可以使用简单的POJO(普通Java类)实现,并由Spring的IoC容器进行管理,一般使用的结构是从上到下在项目中分层:
- 顶层是MVC层,包括表单控制器,Multipart Resolver(文件上传解析器),动态绑定实体模型,集成JSP,Velocity等视图模板引擎。
- 中间层是业务层,包括自定义业务,消息,以及远程访问
- 底层是数据持久层,主要实现ORM映射
7.2 使用第三方Web框架的Spring中间层
假设我们要使用Spring框架来重构一个项目,情况不允许你完全切换到另一个不同的框架。Spring框架不强制你使用它所有的功能,它不是一个全有或全无的解决方案,我们从它由多个模块组件的构成就可以看出。我们完全可以使用第三方Web框架,比如Struts、Tapestry、JSF等UI框架,它们都可以与基于Spring的中间层集成,从而使用Spring的IoC和事务等功能。而你只需要做的就是使用ApplicationContext来管理你的业务逻辑类,并使用WebApplicationContext来集成你的Web层。此时分层结构是:
- 顶层是Web层,使用第三方Web框架
- 中间层是业务层
- 底层是数据持久层
7.3 远程使用场景
你现在需要通过Web服务访问现有代码时,可以使用Spring的Hessian-,Rmi-或HttpInvokerProxyFactoryBean类,启用对现有应用程序的远程访问并不困难。
7.4 EJBs-包装现有的POJOs
Spring还为EJBs(企业级JavaBean)提供了一个访问和抽象层,使你能够重用现有的POJO,并将其包装在无状态会话bean中。
通过上面的使用场景了解到Spring在企业项目中的应用和定位,我们完全可以按照自己的意愿选择性地使用Spring,比如搭建一个基于SSM框架的项目:
- 控制层使用SpringMVC模块
- 业务层使用Spring框架管理并且可以整合其他组件
- 持久层使用Spring整合MyBatis完成对数据库的访问