概述Spring 是最受欢迎的企业级 Java 应用程序开发框架 , 数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码 。
Spring 框架是一个开源的 Java 平台 , 它最初是由 Rod Johnson 编写的 , 并且于 2003 年 6 月首次在 Apache 2.0 许可下发布 。
Spring 是轻量级的框架 , 其基础版本只有 2 MB 左右的大小 。
Spring 框架的核心特性是可以用于开发任何 Java 应用程序 , 但是在 Java EE 平台上构建 web 应用程序是需要扩展的 。Spring 框架的目标是使 J2EE 开发变得更容易使用 , 通过启用基于 POJO 编程模型来促进良好的编程实践 。
三层架构
- A 表现层 web层 MVC是表现层的一个设计模型
- B 业务层 service层
- C 持久层 dao层
当编写一个复杂的 Java 应用程序时 , 应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性 , 当进行单元测试时 , 可以使它们独立于其他类进行测试 。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起 , 并且在同一时间让它们保持独立 。
到底什么是依赖注入?让我们将这两个词分开来看一看 。这里将依赖关系部分转化为两个类之间的关联 。例如 , 类 A 依赖于类 B 。现在 , 让我们看一看第二部分 , 注入 。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中 。
依赖注入可以以向构造函数传递参数的方式发生 , 或者通过使用 setter 方法 post-construction 。由于依赖注入是 Spring 框架的核心部分 , 所以我将在一个单独的章节中利用很好的例子去解释这一概念 。
面向切面的程序设计(AOP):Spring 框架的一个关键组件是面向切面的程序设计(AOP)框架 。一个程序中跨越多个点的功能被称为横切关注点 , 这些横切关注点在概念上独立于应用程序的业务逻辑 。有各种各样常见的很好的关于方面的例子 , 比如日志记录、声明性事务、安全性 , 和缓存等等 。
在 OOP 中模块化的关键单元是类 , 而在 AOP 中模块化的关键单元是方面 。AOP 帮助你将横切关注点从它们所影响的对象中分离出来 , 然而依赖注入帮助你将你的应用程序对象从彼此中分离出来 。
Spring 框架的 AOP 模块提
供了面向方面的程序设计实现 , 可以定义诸如方法拦截器和切入点等 , 从而使实现功能的代码彻底的解耦出来 。使用源码级的元数据 , 可以用类似于 .Net 属性的方式合并行为信息到代码中 。我将在一个独立的章节中讨论更多关于 Spring AOP 的概念 。
体系结构Spring 有可能成为所有企业应用程序的一站式服务点 , 然而 , Spring 是模块化的 , 允许你挑选和选择适用于你的模块 , 不必要把剩余部分也引入 。下面的部分对在 Spring 框架中所有可用的模块给出了详细的介绍 。
Spring 框架提供约 20 个模块 , 可以根据应用程序的要求来使用 。

文章插图
核心容器核心容器由 spring-core , spring-beans , spring-context , spring-context-support和spring-expression(SpEL , Spring 表达式语言 , Spring Expression Language)等模块组成 , 它们的细节如下:
- spring-core 模块提供了框架的基本组成部分 , 包括 IoC 和依赖注入功能 。
- spring-beans 模块提供 BeanFactory , 工厂模式的微妙实现 , 它移除了编码式单例的需要 , 并且可以把配置和依赖从实际编码逻辑中解耦 。
- context 模块建立在由 core和 beans 模块的基础上建立起来的 , 它以一种类似于 JNDI 注册的方式访问对象 。Context 模块继承自 Bean 模块 , 并且添加了国际化(比如 , 使用资源束)、事件传播、资源加载和透明地创建上下文(比如 , 通过 Servelet 容器)等功能 。Context 模块也支持 Java EE 的功能 , 比如 EJB、JMX 和远程调用等 。ApplicationContext 接口是 Context 模块的焦点 。spring-context-support 提供了对第三方集成到 Spring 上下文的支持 , 比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等 。
- spring-expression 模块提供了强大的表达式语言 , 用于在运行时查询和操作对象图 。它是 JSP2.1 规范中定义的统一表达式语言的扩展 , 支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象 , 还支持列表的投影、选择以及聚合等 。

文章插图
数据访问/集成数据访问/集成层包括 JDBC , ORM , OXM , JMS 和事务处理模块 , 它们的细节如下:
(注:JDBC=Java Data Base Connectivity , ORM=Object Relational Mapping , OXM=Object XML Mapping , JMS=Java Message Service)
- JDBC 模块提供了 JDBC 抽象层 , 它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析 。
- ORM 模块提供了对流行的对象关系映射 API 的集成 , 包括 JPA、JDO 和 Hibernate 等 。通过此模块可以让这些 ORM 框架和 spring的其它功能整合 , 比如前面提及的事务管理 。
- OXM 模块提供了对 OXM 实现的支持 , 比如 JAXB、Castor、XML Beans、JiBX、XStream 等 。
- JMS 模块包含生产(produce)和消费(consume)消息的功能 。从 Spring 4.1 开始 , 集成了 spring-messaging 模块 。
- 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理 。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法 , 声明式事务是通过注解或配置由 spring 自动处理 , 编程式事务粒度更细)
2)方便集成各种优秀框架Spring 不排斥各种优秀的开源框架 , 其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持 。
3)降低 Java EE API 的使用难度Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装 , 使这些 API 应用的难度大大降低 。
4)方便程序的测试Spring 支持 JUnit4 , 可以通过注解方便地测试 Spring 程序 。
5)AOP 编程的支持Spring 提供面向切面编程 , 可以方便地实现对程序进行权限拦截和运行监控等功能 。
6)声明式事务的支持只需要通过配置就可以完成对事务的管理 , 而无须手动编程 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
