刚接触Spring的时候做的一些笔记,主要是关于简单介绍Spring等...
Spring是一个开源框架,由Rod Johnson创建。它视为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量-从大小和开销两个方面而言Spring都是轻量的。Spring应用中的对象不依赖于Spring的特定类。控制反转-Spring通过IoC技术促进了松耦合。当应用其的时候,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。可以理解成为IoC和JNDI相反。面向切面-Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现它们应该做的-完成业务逻辑-仅此而已。它们不负责其他的系统级关注点,例如日志或事务支持。
容器-Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器。然而,Spring不应该被混同于传统的重量级EJB容器,它们经常是庞大与笨重的,难以使用。
框架-Spring可以将简单的组建配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件中。Spring也提供了很多基础功能(事务管理、持久化框架集成等),将应用逻辑的开发留给了你。[不过从某种意义上来看,这样增加了开发的复杂性,相当于手写配置文件]
介绍Spring历史
Spring的基础架构起源于 2000 年早期,它是 Rod Johnson 在一些成功的商业项目中构建的基础设施。在 2002 后期,Rod Johnson 发布了《Expert One-on-One J2EE Design and Development》一书,并随书提供了一个初步的开发框架实现—— interface21 开发包,interface21 就是书中阐述的思想的具体实现。后来, Rod Johnson 在 interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、2003 年 2 月 Spring 框架正式成为一个开源项目,并发布于 SourceForge 中。
介绍Spring使命
J2EE应该更加容易使用面向对象的设计比任何实现技术都重要面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。代码应该易于测试[这个使命其实是和敏捷中的测试驱动开发方法有相照应的地方。JavaBean提供了应用程序配置的***方法在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
Spring受到的批判
Spring不是一个“标准”。不是J2EE规范的一部分,没有通过JCP(Java Community Process)的审核认可。
Spring是“超重量级”的。由于Spring涉及的内容很多(例如:jdbc,ORM,远程访问等),但其本质还是Java技术的庞大。Spring只是为了这些技术提供更好的使用方案而已。同时,你可以选择你需要使用的部分。
介绍Spring包含的模块
七个部分:
Spring AOP
Spring ORM
Spring Web
Spring Web MVC
Spring DAO
Spring Context
Spring Core
作为一个整体,这些模块为你提供哦了开发企业应用所需的一切。但你不必将应用完全基于Spring框架。你可以自由地挑选适合你的应用的模块而忽略其他的模块。所有的Spring模块都是核心容器之上构建的。
核心容器
这是Spring框架里最基础的部分,它提供了依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。
应用上下文(Context)模块:
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
另外,这个模块提供了许多企业服务。例如电子邮件JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模板框架例如Velocity和FreeMarker集成的支持。
Spring的AOP模块:
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其他AOP 框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。
Spring的AOP模块也将元数据编程引入了Spring,使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处如何应用切面函数。
JDBC抽象和DAO模块:
使用 JDBC 经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭Spring 的 JDBC 和 DAO 模块抽取了这些重复代码,因此你可以保持你的数据库访问连接。代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的 SQL 错误消息!另外,这个模块还使用了 Spring 的 AOP 模块为 Spring 应用中的对象提供了事务管理服务。
ORM(对象/关系 映射集成模块):
对那些更喜欢使用对象 / 关系映射工具而不是直接使用 JDBC 的人, Spring 提供了ORM 模块。Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括Hibernate、JDO 和 iBATIS SQL 映射。Spring 的事务管理支持这些ORM 框架中的每一个也包括 JDBC。
Spring的Web模块:
Web 上下文模块建立于应用上下文模块之上,提供了一个适合于 Web 应用的上下文。例如:实现文件上传的 multipart 请求,它也另外,这个模块还提供了一些面向服务支持。提供了 Spring 和其它 Web 框架的集成,比如 Struts、WebWork。
Spring的MVC框架:
Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架。虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts,但 Spring 的 MVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离。
总结
Spring 带来了复杂的 J2EE 开发的春天。它的核心是轻量级的 IoC 容器,它的目标是为J2EE 应用提供了全方位的整合框架,在 Spring 框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替, Spring 希望为企业应用提供一站式(one-stop shop)的解决方案。
【编辑推荐】