From Gossip@caterpillar

开源框架: Spring Gossip

春天来了?。。。Spring  是由 Rod Johnson 撰写,并在其著作 Expert One-on-One: J2EE Design and Development 中有提到过,它是个轻量级(Lightweight)容器(Container)、实现 IoC(Inversion of Control)、AOP(Aspect-oriented programming)概念,是一个全方位的应用程式(Application)框架(Framework),可协助建立以往在 EJB 下才有可能建立的一些应用程式。

这边的文件将以我之前曾写过的 文 件 为基础,并在 Spring 1.2.5 的基础上撰写范例以作重新整理的动作。


认识 Spring
        来认识 Spring 的一些特性,并初步了解一下什么叫作 IoC?什么叫作 DI?
核心容器
        Spring 核心容器实作了 IoC,BeanFactory 与 ApplicationContext 的运用是了解 Spring 的重点所在。
  • 管理 Bean 
从第一个 Spring 应用程式开始,逐步了解何谓依赖注入,以及如何使用 Spring 的容器功能来管理 Bean,了解 Bean 在 Spring 容器中的生命周期。
  • Bean 进阶管理
理想上对于 Bean 来说,它不需要意识到 Spring 容器的存在,然而有时候 Bean 仍必须知道有关于 Spring 容器或自己的一些讯息,而另一方面,您可能必须让容器对 Bean 进行一些额外处理。
  • 讯息与事件
ApplicationContext 除了具备如 BeanFactory 基本的容器管理功能之外,并支援更多应用程式框架的特性,像是资源的取得、讯息解析、事件的处理与传播。

AOP(Aspect-Oriented Programming)
        在一个服务的流程中插入与服务无关的逻辑(例如Logging、Security),这样的逻辑称为 Cross-cutting concerns,将 Crossing-cutting concerns 独立出来为一个物件,这样的特殊物件称之为 Aspect,Aspect-oriented programming 着重在 Aspect 的设计及与应用程式的缝合(Weave)。
  • AOP 入门
AOP 的观念与术语都不是很直觉,可以先从代理机制(Spring 实现 AOP 的一种方式)来看看实际的例子,从而了解 AOP 的观念与各种术语。
  • Advices
Advices 包括了Aspect 的真正逻辑,由于缝合至Targets的时机不同,Spring 提供了几种不同的 Advices。
Pointcut 定义了 Advice 的应用时机,在 Spring 中,使用 PointcutAdvisor 将 Pointcut 与 Advice 结合成为一个物件,Spring 中大部分内建的 Pointcut 都有对应的 PointcutAdvisor。
  • Introduction
为特殊的 Advice,它影响的不是方法的流程,而是影响整个物件的行为,为物件动态 mixin 职责。
自动代理可以让您 不用为每一个要被 Advised 的 Target 手动定义代理物件,透过 Bean 名称或是 Pointcut 的比对,自动为符合的 Target 建立代理物件。

持久层
        来看看 Spring 的 IoC 容器与 AOP 框架如何应用于持久层,包括了资料库、交易等相关议题。
  • 资料库存取
Spring 提供了 DAO 框架,让应用程式开发时无须耦合于特定资料库技术。
Spring 在 JDBC 的使用上提供了几个类别,让您可以简化 JDBC 在使用时的流程。
  • 交易管理
Spring 提供编程式的交易管理(Programmatic transaction management)与宣告式的交易管理(Declarative transaction management),为不同的交易实作提供了一致的编程模型。
  • Hibernate 支援
Spring 整合了对 Hibernate 的设定,并提供有 HibernateTemplate 等类别,让您在结合 Hibernate 时可以简化使用上的流程。

Web 层
        Spring 提供了 MVC Web 框架,您可以善用 IoC 容器在依赖注入上的好处,另一方面,Spring 也致力于与其它的 Web 框架的整合。
  • Spring MVC 入门
从一个最简单的 Spring Web 应用程式,来看看 Spring  MVC 框架的架构与 API 组成元素。
  • 使用 Controller 相关类别
与其它 Web 框架的 Action 物件不同的是,Spring 提供了丰富的 Controller 相关类别,让您可以依需求来制作自己所需的 Controller 物件。
介绍如何在 Controller上搭配使用验证器(Validator)、如何实作Command资料的型态转换,以及如何使用Spring的相关API来实作档案 上传的功能。

View层方案、Web框架整合
        当使用JSP作为View层技术时,您可以结合JSTL以及Spring提供的标签,而除了JSP技术作为View层之外,Spring还提供了不同 View层技术的解决方案,您甚至可以定义自己的View层技术实现。
  • JSP View 层
当使用 JSP 作为 View 层技术时,您可以结合 JSTL 以及 Spring 提供的标签。
  • 其它 View 层
除了 JSP View 层技术之外,您还可以使用其它的 View 层技术,或建立自己的 View Class。
  • 与其它 Web 框架的整合
您可以将 Spring 与现在的一些 Web 框架结合在一起,重点都在于如何让 Web 框架意识到 Spring 的存在。

其它
        Spring 提供了简化且一致的方式,让您在使用一些 API 或服务时更加简单。
  • 远程(Remoting)
Spring 提供了一致的使用方式,即使所采用的远程服务技术不尽相同,在 Spring 中运用它们的方式却是一致的。
对于邮件发送服务 的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos.CosMailSenderImpl与 org.springframework.mail.javamail.JavaMailSenderImpl。
Spring则对 java.util.Timer提供了抽象封装,让您可以善用Spring的容器管理功能,而Spring对Quartz进行了封装,让它在使用上更加方 便。

参考资料