Spring框架:轻量级J2EE开发的理想选择
立即解锁
发布时间: 2025-08-19 02:32:40 阅读量: 3 订阅数: 11 


Spring框架下的Java开发实践与进阶
### Spring框架:轻量级J2EE开发的理想选择
#### 1. Spring的起源与发展
Spring最初源于Rod Johnson在1997 - 2002年作为大型Java/J2EE应用顾问的经验。他为不同客户编写了多个框架,其中最后一个为一家知名全球媒体集团开发的框架,最初是一个Web MVC框架,后来扩展为包含依赖注入容器和数据访问服务。这些经验被收录在《Expert One-on-One J2EE Design and Development》一书中,书中不仅讨论了J2EE开发中的问题,还包含了30,000行代码的“Interface21框架”,展示了解决这些问题的实用方法。
读者对这些代码反应积极,很多人发现它解决了他们在J2EE开发中反复遇到的问题。随后几个月,众多读者询问许可证条款,以便在项目中使用代码,并自愿提供想法和实际帮助,推动框架进一步发展。2003年2月开源框架成立后,Juergen Hoeller成为与Rod共同的领导者,他立即在实现和设计方面做出了巨大贡献。其他开发者如Thomas Risberg、Colin Sampaleanu和Alef Arendsen也早早加入,并在特定领域做出了重要贡献。
有趣的是,Spring常用的概念,如依赖注入,也被其他项目独立开发。虽然PicoContainer项目在Spring公开之前就已宣布,但实际上它比Spring项目晚开始几个月。此外,ATG Dynamo应用服务器在其专有功能中包含了依赖注入能力,但Spring团队在Spring被广泛采用后才知晓。
Spring社区也为Spring的发展做出了巨大贡献。他们通过在各种环境中的经验报告问题,并提出许多改进建议。Spring项目从一开始就尊重并倾听用户意见,开发者团队积极响应,这有助于建立一个繁荣的社区。Spring采用Apache 2.0许可证,这是一种广泛使用且无限制的开源许可证。2004年8月,Rod、Juergen、Colin等核心开发者成立了Interface21公司,致力于Spring咨询、培训和支持,为Spring的未来提供了经济保障。
#### 2. Spring的功能模块
Spring的功能分为两大类:
- **IoC容器和AOP框架**:处理服务的配置和应用到对象。
- **一组可应用于应用对象的服务**:这些服务可作为类库使用,甚至在不同的运行时容器中也能使用。
Spring是一个分层框架,具有以下核心模块:
| 模块名称 | 功能描述 |
| ---- | ---- |
| IoC容器 | 通过依赖注入配置对象,支持应用对象的各种可选回调 |
| 基于代理的AOP框架 | 提供非侵入式框架,可管理POJO,可编程使用或与IoC容器集成 |
| 数据访问抽象 | 包括DAO异常层次结构、与多种数据访问API的集成类以及Spring自己的JDBC抽象框架 |
| 事务抽象 | 可在多种底层事务API上运行,提供一致的编程模型 |
| 简化与JNDI、EJB等复杂J2EE API和服务的交互 | 消除编写JNDI查找和EJB访问或实现的样板代码,增加代码复用性 |
| MVC Web框架 | Spring自己的请求驱动MVC框架,与中间层功能紧密集成 |
| 与众多第三方产品集成 | 作为架构胶水,可轻松将额外服务“别名”到Spring IoC中 |
| 远程调用 | 提供轻量级远程调用支持,支持多种协议 |
| 简化EJB使用 | 包括支持实现EJB和访问EJB |
| 使用JMS进行消息发布 | 采用回调模板方法,最小化发布JMS消息的应用代码复杂性 |
| JMX支持 | Spring 1.2提供强大的JMX层,可将任何Spring管理的对象发布到JMX |
当使用Spring的AOP框架时,在Spring 1.3中,Spring IoC容器之上还提供了一层动态功能:
- 支持脚本语言,双向完全支持依赖注入。
- 支持由数据库支持的对象。
#### 3. Spring模块的使用特点
Spring的模块化架构允许用户单独使用任何部分。例如,若只想使用IoC容器简化配置管理,无需使用Spring的其他部分;若想使用Spring AOP,也可在不使用IoC容器的情况下进行。不同Spring模块的设计具有一致性,若使用更多的Spring栈,可在不同领域利用相同概念,使应用更具内部一致性,也使整个框架更易于学习。
Spring主要是集成最佳解决方案。虽然Spring下载包较大,但这主要是由于其与其他产品的集成。运行核心IoC容器只需Spring二进制文件和Jakarta Commons Logging JAR。IoC容器和AOP框架的一些高级功能需要CGLIB。Spring提供了多个JAR文件,提供不同的服务:
| JAR文件名称 | 大小 | 功能描述 |
| ---- | ---- | ---- |
| spring.jar | 1.4MB | 包含所有核心Spring类,除了spring - mock.jar中的类 |
| spring - core.jar | 265K | 核心IoC容器和框架中其他地方使用的实用类 |
| spring - context.jar | 276K | 更高级的IoC功能、JNDI和EJB支持、验证、调度和远程调用支持 |
| spring - aop.jar | 144K | Spring的AOP框架 |
| spring - dao.jar | 241K | Spring的数据访问异常层次结构、JDBC抽象和事务抽象,包括JTA支持 |
| spring - orm.jar | 190K | 与Hibernate、JDO、iBATIS和Apache OJB的集成 |
| spring - web.jar | 114K | 用于Web应用的ApplicationContext实现、Servlet过滤器、与Struts和Tiles的集成、Web数据绑定实用程序和多部分支持 |
| spring - webmvc.jar | 190K | Spring自己的Web MVC框架 |
| spring - mock.jar | 40K | 用于Spring容器中JUnit测试对象的模拟对象实现和超类 |
大多数用户发现使用spring.jar是最简单的选择。从文件大小可以看出,核心IoC容器大小仅略超过200K。
#### 4. Spring的支持环境
Spring要求J2SE 1.3或更高版本。在能产生显著效益的情况下,Spring会使用J2SE 1.4的优化,但必要时会回退到使用J2SE 1.3的API。例如,在J2SE 1.4下,AOP框架有一些优化,如使用新的IdentityHashMap和StackTraceElement,使Spring的AOP框架在J2SE 1.4及以上版本运行更快,但在J2SE 1.3上仍能保持完整功能。
某些额外功能仅在Java 5.0中支持,例如Spring支持Java 5.0注解来驱动声明式事务管理。但在可预见的未来,核心框架的实现将保持与J2SE 1.4兼容,因为大型企业用户通常使用较旧版本的应用服务器,升级速度较慢。
需要注意的是,Spring核心不依赖于J2EE API,IoC容器和AOP框架可在J2EE环境之外使用,甚至事务支持也可在完整的J2EE环境(使用JTA)中使用。
#### 5. Spring的优势总结
Spring是自2003年以来流行的“轻量级”J2EE框架中最受欢迎和全面的框架。它能简化J2EE开发工作,使应用架构和实现更加一致。Spring基于POJO的应用编程模型,通过依赖注入和AOP这两个已被证明有效的范式实现这一目标。
依赖注入是一种配置管理方法,通过Spring提供的控制反转容器,通过JavaBean属性或构造函数参数配置应用对象,消除了应用代码实现框架接口的需要,支持对象的热交换。AOP为POJO提供服务,而无需它们了解框架API或受框架要求的过度约束。
Spring在多个重要领域提供一致的抽象,支持其依赖注入和AOP功能,包括数据访问、事务管理、命名和查找、远程调用。Spring的设计促进了架构的良好实践,典型的Sprin
0
0
复制全文
相关推荐










