上世纪90年代,使用Java开发Web应用普遍使用J2EE标准,J2EE具有平台无关性,对事务、消息等企业级的特性都有很好的支持, 但当时的J2EE仍存在一些问题:
- 非常复杂 EJB的诞生是为了使Java EE的开发变得简单,但是在当时它并没有实现这个目标, 完成一个组件需要配置许多的XML文件、本地接口、远程接口等等。
- 组件依赖耦合 当一个组件依赖另一个组件时,它必须通过名称自己查找依赖,而名称是写在代码中的,就是所谓的“硬编码”。
- 重量级 无论用户是否需要,当时像集群、远程调用等这些特性全部被支持,不得不去配置。 这些使得程序变得非常臃肿,不灵活。
当时存在的这些问题就导致了市场上出现了各种各样的Java 框架。 比如现在被我们熟知的Spring Framework。
早在2002年的11月份,Rod Johnson 发表了一本名为《Expert One-on-One J2EE Design and Development》的书。 这本书中就包含了Spring 框架代码,最初这个框架叫做“Interface 21 framework”(直接取 com.interface21 包名), 后来 Yann 提议命名为 Spring(春天),寓意 :Spring代表了一个新的开始,结束了传统J2EE开发的“寒冬”。
Spring 是为了简化企业级开发的框架,但是实际开发中还是要配置 xml 文件或者 javaconfig 文件,并且考虑各个框架之间的融合性。
Spring不是一个单一的框架,而是一个功能各异,又互相补充的框架家族。 为开发者提供了一个一站式的轻量级应用开发平台 提供给开发者多种的技术选择 Spring从最初的一城一池,发展到如今已经发展为一个生态帝国 旗下拥有诸多的子项目,从最基本的Spring Ioc/AOP使用 到 安全 管理 ,再到 大数据 ,Spring已经逐渐的渗入到各个领域 目前,几乎所有JavaWeb相关的开发都可以在Spring中找到合适的方案
*** 简化 Java 开发 ***
框架 是能完成一定功能的半成品 能够帮助我们完成的是 项目的整体框架、一些基础功能、规定了类和对象如何创建,如何协作等 当我们开发一个项目时,框架帮助我们完成了一部分功能,我们自己再完成一部分,那这个项目就完成了。 非侵入式设计 从框架的角度可以理解为:无需继承框架提供的任何类 这样我们在更换框架时,之前写过的代码几乎可以继续使用 轻量级和重量级 轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等 JavaBean 即符合 JavaBean 规范的 Java 类 注意 bean 的各种名称 虽然 Spring 用 bean 或者 JavaBean 来表示应用组件 但并不意味着 Spring 组件必须遵循 JavaBean 规范,一个 Spring 组件可以是任意形式的 POJO POJO 即 Plain Old Java Objects,简单老式 Java 对象 它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。 容器 从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
低侵入 / 低耦合 (降低组件之间的耦合度,实现软件各层之间的解耦) 声明式事务管理(基于切面和惯例) 方便集成其他框架(如MyBatis、Hibernate) 降低 Java 开发难度 Spring 框架中包括了 J2EE 三层的每一层的解决方案(一站式)
① Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
② Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
③ Spring 能非常简单的帮我们管理数据库事务。
④ Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤ Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
⑥ Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。