Spring 框架
Spring 框架是一个 Java 平台,为开发 Java 应用程序提供全面的基础架构支持。
一、Spring 的核心:依赖注入和控制反转
Java 平台提供了丰富的应用程序开发功能,但是缺乏将基本模块整合为一个整体的功能。
Spring 为开发者提供一个一站式的轻量级应用开发框架(平台)。
在 JavaEE 的应用开发中,支持 POJO 和 使用 JavaBean 的开发方式,是应用面向接口开发,充分支持面向对象的设计方法。
1. 依赖注入
对象和对象之间的依赖关系,如果由对象自身管理,那么会导致代码的高度耦合和测试性的降低。
对象的依赖关系常常体现在对数据和方法的依赖上。
如 A 对象需要使用 B、C、E 对象的属性或方法,通常情况下,我们会通过 new 的方式来使用,但如果 B、C、E 又同时依赖了 D、E、F 对象呢。
而将这些依赖关系,通过对象的依赖注入交给 IoC 容器来完成,则可以很大程度上简化该复杂性。
2. 控制反转
控制反转,指的是责任的反转,即对象的依赖转到 IoC 容器中。
原本由对象自身去管理依赖对象,但是现在对象的依赖全部由 IoC 容器管理。
二、Spring 中的模块
Spring 框架的功能被有组织的分散到约 20 个模块中,这些模块分布在核心容器、数据访问/集成、Web、AOP、Instrumentation、消息传输和测试中。
1. 核心容器
- spring-core 和 spring-beans 模块
- 提供了框架的基础功能,包括 IOC 和 *依赖注入 *的功能
- BeanFactory 是一个成熟的 工厂模式 的实现,将依赖关系的配置和描述从程序逻辑中解耦出来,使使用者无需再通过编程去实现单例模式
- spring-context 模块
- 该模块建立在 spring-core 和 spring-beans 的基础之上
- 提供一个框架式的对象访问方式
- 上下文模块从 spring-beans 模块继承其功能,并添加支持了如:国际化、事件传播、资源负载、透明创建上下文等,还支持 JavaEE 的功能(如 EJB、JMX 和远程的处理)
- spring-context-support 模块支持整合第三方库到 Spring 应用程序上下文中,特别是用于高速缓存(ehcache、JCache) 和 调度(CommonJ、Quartz)的支持
- ApplicationContext 接口是 spring-context 模块的核心
- spring-expression 模块
- 提供了强大的表达式语言去支持查询和操作运行时对象图
- 对 JSP2.1 规范中的 EL 表达式的扩展
- 支持设置和获取属性、属性分配、方法调用、访问数组、集合和索引的内容、逻辑和算术运算、变量命名以及从 IOC 容器中以名称检索对象
- 还支持列表投影和选择,以及常见的列表聚合
2. AOP
- spring-aop 模块
- 提供了一个符合 AOP 的面向切面的编程实现
- 允许定义方法拦截器和切入点,能够用来解耦应该被分离的功能
- spring-aspects 模块
- 提供了与 AspectJ 的集成
- spring-instrument 模块
- 提供了类植入(instrument)支持 和类加载器的实现,可以应用在特定的应用服务器中
- spring-instrument-tomcat 模块支持 Tomcat 的植入代理
3. 消息集成
- spring-messaging 模块
- 消息传递模块,包含来自 Spring Integration 的项目,如 Message、MessageChannel、MessageHandler 和其它用于传输消息的基础应用
4. 数据访问/集成
- spring-jdbc 模块
- 提供了一个 JDBC 的重选 ing,消除了繁琐的 JDBC 编码和数据库特有的错误解析
- spring-tx 模块
- 支持用于实现特殊接口和所有 POJO 的类的编程
- 声明式事务管理
- spring-orm 模块
- 为对象关系映射(Object-Relational Mapping) API 提供集成层,包括 JPA 和 hibernate
- 可以将 O/R 映射与 Spring 提供的其他功能结合使用,如声明式事务
- spring-oxm 模块
- 提供一个支持 对象/XML 映射的抽象层
- spring-jms 模块
- 用于生产和消费消息的功能
- 4.1 版本之后,提供与 spring-messaging 的集成
5. Web
- spring-web 模块
- 提供基本的面向 Web 的集成功能
- 如多部分文件上传、初始化一个 Servlet 监听器、面向 Web 的 ApplicationContext 的 IoC 容器
- 包含一个 HTTP 客户端和 Spring 的远程支持的 web 部分
- spring-webmvc 模块
- 包含用于 Web 应用的 Spring 的 模型 - 视图 - 控制 (MVC)
- Rest Web Services 的实现
- spring-websocket 模块
- WebSocket 支持
6. 测试
- spring-test 模块
- 支持 JUnit 或 TestNG 对 Spring 组件进行 单元测试 和 集成测试
- 提供 Mock 对象
- 提供 Spring ApplicationContext 的一致加载和上下文缓存
三、使用场景
Spring 的特点:
- Spring 是一个非侵入性框架,其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有 Spring 或其他容器的情况下运行
- Spring 提供了一个一致的编程模型,使应用直接使用 POJO 开发,从而可以与运行环境隔离
- Spring 改进了体系结构的选择,Spring 可以帮助我们选择不同的技术实现,如 hibernate 到 mybatis,struts 到 springmvc 等,降低了平台锁定的风险(虽然一般不会这样做)