Spring Gossip学习笔记

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
  • Inversion of Control
  • Dependency Injection

核心容器
        Spring 核心容器實作了 IoC,BeanFactory 與 ApplicationContext 的運用是了解 Spring 的重點所在。
  • 管理 Bean 
從第一個 Spring 應用程式開始,逐步了解何謂依賴注入,以及如何使用 Spring 的容器功能來管理 Bean,了解 Bean 在 Spring 容器中的生命週期。
    • 第一個 Spring 程式
    • BeanFactory、 ApplicationContext
    • Type 2 IoC、Type 3 IoC
    • 屬性參考
    • 自動綁定
    • 集合物件注入
    • Bean 的生命週期
  • Bean 進階管理
理想上對於 Bean 來說,它不需要意識到 Spring 容器的存在,然而有時候 Bean 仍必須知道有關於 Spring 容器或自己的一些訊息,而另一方面,您可能必須讓容器對 Bean 進行一些額外處理。
    • 不使用XML定義檔進行 Bean設置
    • Aware 相關介面
    • BeanPostProcessor
    • BeanFactoryPostProcessor
    • PropertyPlaceholderConfigurer
    • PropertyOverrideConfigurer
    • CustomEditorConfigurer
  • 訊息與事件
ApplicationContext 除了具備如 BeanFactory 基本的容器管理功能之外,並支援更多應用程式框架的特性,像是資源的取得、訊息解析、事件的處理與傳播。
    • Resource 的取得
    • 解析文字訊息
    • 傾聽事件
    • 事件傳播

AOP(Aspect-Oriented Programming)
        在一個服務的流程中插入與服務無關的邏輯(例如Logging、Security),這樣的邏輯稱為 Cross-cutting concerns,將 Crossing-cutting concerns 獨立出來為一個物件,這樣的特殊物件稱之為 Aspect,Aspect-oriented programming 著重在 Aspect 的設計及與應用程式的縫合(Weave)。
  • AOP 入門
AOP 的觀念與術語都不是很直覺,可以先從代理機制(Spring 實現 AOP 的一種方式)來看看實際的例子,從而了解 AOP 的觀念與各種術語。
    • 從代理機制初探 AOP
    • 動態代理
    • AOP 觀念與術語
    • Spring AOP
  • Advices
Advices 包括了Aspect 的真正邏輯,由於縫合至Targets的時機不同,Spring 提供了幾種不同的 Advices。
    • Before Advice
    • After Advice
    • Around Advice
    • Throw Advice
  • Pointcut、Advisor
Pointcut 定義了 Advice 的應用時機,在 Spring 中,使用 PointcutAdvisor 將 Pointcut 與 Advice 結合成為一個物件,Spring 中大部分內建的 Pointcut 都有對應的 PointcutAdvisor。
    • NameMatchMethodPointcutAdvisor
    • RegExpMethodPointcutAdvisor
    • ControlFlowPointcut
    • Pointcut 介面
    • Pointcut 交集、聯集操作
  • Introduction
為特殊的 Advice,它影響的不是方法的流程,而是影響整個物件的行為,為物件動態 mixin 職責。
    • IntroductionInterceptor
    • DelegatingIntroductionInterceptor
  • Autoproxing
自動代理可以讓您不用為每一個要被 Advised 的 Target 手動定義代理物件,透過 Bean 名稱或是 Pointcut 的比對,自動為符合的 Target 建立代理物件。
    • BeanNameAutoProxyCreator
    • DefaultAdvisorAutoProxyCreator

持久層
        來看看 Spring 的 IoC 容器與 AOP 框架如何應用於持久層,包括了資料庫、交易等相關議題。
  • 資料庫存取
Spring 提供了 DAO 框架,讓應用程式開發時無須耦合於特定資料庫技術。
    • Spring 的 DAO 支持
    • DataSource 注入
    • DataSource 置換
  • JDBC 支援
Spring 在 JDBC 的使用上提供了幾個類別,讓您可以簡化 JDBC 在使用時的流程。
    • 使用 JdbcTemplate
    • JdbcTemplate 執行與更新
    • JdbcTemplate - 查詢
    • 以物件方式進行操作
    • DataFieldMaxValueIncrementer
  • 交易管理
Spring 提供編程式的交易管理(Programmatic transaction management)與宣告式的交易管理(Declarative transaction management),為不同的交易實作提供了一致的編程模型。
    • Spring 對交易的支援
    • JDBC 編程式交易管理
    • JDBC 宣告式交易管理
    • 交易的屬性介紹
    • TransactionAttributeSource、 TransactionAttribute
  • Hibernate 支援
Spring 整合了對 Hibernate 的設定,並提供有 HibernateTemplate 等類別,讓您在結合 Hibernate 時可以簡化使用上的流程。
    • 第一個 Hibernate 程式
    • SessionFactory 注入
    • HibernateTemplate
    • Hibernate 編程交易管理
    • Hibernate 宣告式交易管理

Web 層
        Spring 提供了 MVC Web 框架,您可以善用 IoC 容器在依賴注入上的好處,另一方面,Spring 也致力於與其它的 Web 框架的整合。
  • Spring MVC 入門
從一個最簡單的 Spring Web 應用程式,來看看 Spring  MVC 框架的架構與 API 組成元素。
    • 第一個 Spring MVC 程式
    • WebApplicationContext
    • Handler Mapping
    • Handler Interceptor
    • Controller 繼承架構
    • ModelAndView
    • View Resolver
    • Exception Resolver
  • 使用 Controller 相關類別
與其它 Web 框架的 Action 物件不同的是,Spring 提供了豐富的 Controller 相關類別,讓您可以依需求來製作自己所需的 Controller 物件。
    • AbstractController
    • MultiActionController 與 ParameterMethodNameResolver
    • MultiActionController 與 PropertiesMethodNameResolver
    • ParameterizableViewController
    • AbstractCommandController
    • AbstractFormController
    • SimpleFormController
    • AbstractWizardFormController
    • ThrowawayController
  • 搭配 Controller 的類別
介紹如何在 Controller上搭配使用驗證器(Validator)、如何實作Command資料的型態轉換,以及如何使用Spring的相關API來實作檔案上傳的功能。
    • 實作 Validator
    • 使用 PropertyEditor
    • 檔案上傳

View層方案、Web框架整合
        當使用JSP作為View層技術時,您可以結合JSTL以及Spring提供的標籤,而除了JSP技術作為View層之外,Spring還提供了不同 View層技術的解決方案,您甚至可以定義自己的View層技術實現。
  • JSP View 層
當使用 JSP 作為 View 層技術時,您可以結合 JSTL 以及 Spring 提供的標籤。
    • 結合 JSTL
    • <spring:bind> 標籤
    • 數據綁定的幾個方法
    • <spring:message> 標籤
    • <spring:transform> 標籤
  • 其它 View 層
除了 JSP View 層技術之外,您還可以使用其它的 View 層技術,或建立自己的 View Class。
    • 以 Tiles 為例
    • 自訂 View Class
  • 與其它 Web 框架的整合
您可以將 Spring 與現在的一些 Web 框架結合在一起,重點都在於如何讓 Web 框架意識到 Spring 的存在。
    • 第一個 Struts 程式
    • 在 Struts 中整合 Spring
    • 第一個 JSF 程式
    • 在 JSF 中整合 Spring

其它
        Spring 提供了簡化且一致的方式,讓您在使用一些 API 或服務時更加簡單。
  • 遠程(Remoting)
Spring 提供了一致的使用方式,即使所採用的遠程服務技術不儘相同,在 Spring 中運用它們的方式卻是一致的。
    • RMI
    • Hessian、 Burlap
    • Http Invoker
  • 郵件
對於郵件發送服務的支援是由Spring的 org.springframework.mail.MailSender介面所定義,它有兩個實作類別, org.springframework.mail.cos.CosMailSenderImpl與 org.springframework.mail.javamail.JavaMailSenderImpl。
    • 簡單郵件
    • HTML 郵件
    • 內嵌圖片或附檔
  • 排程
Spring則對 java.util.Timer提供了抽象封裝,讓您可以善用Spring的容器管理功能,而Spring對Quartz進行了封裝,讓它在使用上更加方便。
    • 使用 TimerTask
    • 使用 MethodInvokingTimerTaskFactoryBean
    • 使用 Quartz
    • 使用 MethodInvokingJobDetailFactoryBean

參考資料
  • Inversion of Control Containers and the Dependency Injection pattern
  • The Dependency Inversion Principle
  • The Spring Framework
  • Developing a Spring Framework MVC application step-by-step
  • Introducing the Spring Framework
  • Aspect-oriented programming with the Spring framework
  • A tutorial for Spring Web
  • Spring 開發指南
 

你可能感兴趣的:(spring,AOP,Hibernate,bean,框架,IOC)