Spring教學


Spring框架,由Rod Johnson開發,是一個非常強大的反轉控制(IOC)框架,以幫助分離專案元件之間的依賴關係。

在本系列教學,將多個步驟提供一些例子,用來學習和解釋Spring框架。
新的 Spring 4.1 教學 (2016/8/12)
增加了關於使用Spring EL,JavaConfig,AspectJ和Spring物件/XML對映(OXM)等許多Spring 4.0 的範例教學。

Spring框架相關教學(推薦)

Spring快速入門

快速入門了解Spring框架開發的基礎。

  1. Spring hello world範例 - Spring3.0hello world範例,在新的Spring3.0開發需要什麼。
  2. Spring鬆耦合的範例 - 這是一個用來演示Spring是如何使元件之間鬆耦合的例子。
  3. Spring MVC教學 - Spring MVC系列教學。

Spring JavaConfig

Spring 3.0支援JavaConfig,現在可以使用註解來組態Spring。

  1. Spring JavaConfig範例 - 使用@Configuration@Bean演示到在Spring定義的bean
  2. Spring JavaConfig @Import範例 - 使用@Import組織Bean類模組化的範例。

Spring 依賴注入(DI)

Spring如何使用依賴注入(DO)來管理物件的依賴關係。

  1. Spring依賴注入 (DI) - Spring如何通過應用Setter注入和構造器注入的依賴注入(DI)設計模式範例
  2. Spring通過setter方法注入 - 通過setter方法依賴注入Bean
  3. Spring通過構造方法注入 - 可以通過構造方法依賴注入Bean
  4. Spring構造方法注入型別歧義 - 建構函式注入引數型別歧義的問題總是發生在一個bean包含多個構造方法有多個引數。

Spring Bean基礎

Spring IoC容器使用類就會被認為是「Bean」,並可在Spring bean的組態檔案或者通過註解來宣告。

  1. Spring bean參照範例 - 如何指定相同或不同的bean組態檔案中的bean參照互相存取。
  2. 注入值到Spring Bean的屬性 - 演示使用三種方法注入值到bean的屬性。
  3. 載入多個Spring bean組態檔案 - 開發人員總是在不同的模組檔案夾歸類不同的bean組態檔案,這裡有一個技巧,向您展示如何載入多個Spring bean 的組態檔案。
  4. Spring內部Bean範例 - 每當一個bean僅用於一個特定的屬性,它總是建議將其宣告為一個內部bean。
  5. Spring bean作用域 - Bean作用域是用來決定哪些bean範例的型別應該是從Spring容器中返回給呼叫者。
  6. Spring集合(List, Set, Map, and Properties)範例 - 注入值到集合型別(列表,集,對映和屬性)範例。
  7. ListFactoryBean範例 - 建立一個具體的列表集合類(ArrayList 和 LinkedList),並注入到 bean 屬性。
  8. SetFactoryBean範例 - 建立一組具體的Set集合類(HashSet和TreeSet),並注入到bean屬性。
  9. MapFactoryBean範例 - 建立一個具體的對映集合類(HashMap和TreeMap中),並注入到bean屬性。
  10. Spring注入日期到bean屬性(CustomDateEditor) - 一般情況下,Spring接受日期變數,這裡有一個技巧,那就是使用CustomDateEditor來解決。
  11. Spring PropertyPlaceholderConfigurer範例 - 通過一個特殊格式具體化部署詳情到一個屬性檔案,並從bean組態檔案存取獲得 – ${variable}
  12. Spring bean組態繼承 - 繼承是非常有用,一個bean來分享共同的值,屬性或組態。
  13. Spring依賴檢查 - Spring4中提供了依賴檢查模式,以確保所要求的屬性已經在bean中設定。
  14. Spring使用@Required註解依賴檢查 - 依賴檢查注釋模式。
  15. 自定義@Required-style註解 - 建立自定義@Required-style註解,相當於 @Required 註解
  16. Bean InitializingBean和DisposableBean範例 - 執行 bean 初始化和銷毀某些動作(介面)
  17. Bean init-method和destroy-method範例 - 執行 bean 初始化和銷毀某些動作(XML)
  18. Bean @PostConstruct和@PreDestroy範例 - 執行 bean 初始化和銷毀某些動作(註解)

Spring表示式語言

Spring 3.0引入了Spring表達語言,或Spring EL豐富而強大的表示式語言。

  1. Spring EL hello world範例 - 使用 Spring 表示式語言(EL)快速入門
  2. Spring EL bean參照範例 - 參考beanbean屬性使用一個點(.)符號。
  3. Spring EL 方法呼叫範例 - 直接呼叫Bean方法
  4. Spring EL操作符範例 - Spring EL支援大多數標準的關係,邏輯和數學運算子。
  5. Spring EL三元操作符(if-then-else)範例 - 有條件的檢查:if else then.
  6. Spring EL Arrays, Lists, Maps範例 - 適用於對映和列表。
  7. Spring EL正規表示式範例 - 正規表示式來計算評估條件。
  8. Spring EL與ExpressionParser測試 - 如何組合併用於測試Spring El。

Spring自動元件掃描

Spring是能夠掃描,檢測並自動註冊 bean 的。

  1. Spring自動掃描元件 - 讓Spring自動掃描,檢測和註冊Bean
  2. Spring過濾器元件自動掃描 - 過濾器自動掃描模式的某些元件範例。

Spring自動裝配Bean

Spring自動裝配「auto-wiring「來裝配或Bean類,無論是在XML和注釋。

  1. Spring自動裝配Beans - Spring5種自動裝配方式總結。
  2. Spring按型別(Type)自動裝配 - 如果一個 bean 的資料型別是用其它 bean 屬性的資料型別,那麼自動裝配它。
  3. Spring按名稱(Name)自動裝配 - 如果一個 bean 的名稱與其他bean屬性的名稱是一樣的,那麼可以自動裝配它。
  4. Spring由構造方法自動裝配 - 由在建構函式的引數型別自動裝配。
  5. Spring由AutoDetect自動裝配 - 選擇「用建構函式自動裝配」,如果預設建構函式被找到,否則使用「自動裝配按型別」。
  6. Spring使用@Autowired註解自動裝配 - 例子來說明如何定義注解 「auto-wiring」 模式。
  7. Spring自動裝配@Qualifier範例 - 在這個例子中演示確定哪些Bean有資格自動裝配到某個欄位上。

Spring AOP (面向方面程式設計)

Spring AOP的模組化方面橫切關注點。簡單地說,就是一個攔截器攔截一些方法。

  1. Spring AOP通知範例(Advice) - 有關不同型別的 Spring 建議說明和範例。
  2. Spring AOP範例(Pointcut, Advisor) - 有關不同型別的 Spring 的切入點和 Advisor 的解釋和範例。
  3. Spring AOP攔截器的順序 - AOP攔截器的順序會影響功能。
  4. 自動代理建立者範例 - 一個自動代理生成例子是用來為Bean自動建立代理物件,以避免造成許多重複的代理物件。

Spring AOP + AspectJ框架

由於Spring 2.0中對 AspectJ 更加靈活和強大的支援。然而,本範例在 Spring3.0 中應用說明。

  1. Spring AOP+AspectJ註解範例 - 一個例子向您展示如何將AspectJ 註解與Spring框架整合。
  2. Spring AOP+AspectJ 在XML組態範例 - Spring AOP 使用AspectJ 在XML基本組態。

Spring Object/XML 對映器

在Spring3.0,物件到XML對映(OXM)從Spring Web服務到核心Spring框架。

  1. Spring Object/XML對映範例 - Spring oxm+castor轉換物件到XML,反之亦然。

Spring JDBC支援

Spring提供了很多輔助類簡化整個 JDBC 資料庫操作。

  1. Spring+JDBC範例 - 一個例子來說明如何整合 SpringJDBC
  2. JdbcTemplate+JdbcDaoSupport範例 - 使用SpringJdbcTemplateJdbcDaoSupport類來簡化整個JDBC資料庫操作過程的一個範例。
  3. Spring JdbcTemplate查詢範例 - 這裡有一些例子來說明如何使用JdbcTemplatequery()方法來查詢或從資料庫中提取資料。
  4. Spring JdbcTemplate batchUpdate()範例 - 這裡是一個 BATCHUPDATE()例子用來說明如何執行批次插入操作。
  5. Spring SimpleJdbcTemplate查詢範例 - 更多的使用者查詢操作,或從資料庫中提取資料的友好而簡單的方法。
  6. Spring SimpleJdbcTemplate batchUpdate()範例 - 使用SimpleJdbcTemplate類,一個Java5 的友好補充 JdbcTemplate 的一個批次更新的例子。
  7. Spring SimpleJdbcTemplate類命名引數範例 - 一個例子來說明如何使用命名引數作為SQL引數值,而這僅僅是在SimpleJdbcTemplate中支援。

Spring Hibernate支援

Spring 提供了許多方便的類來支援 Hibernate ORM框架。

  1. Spring+Hibernate+MySql範例
    使用 Spring 和 Hibernate 的一個簡單的專案。
  2. Spring + Hibernate+ MySql註解範例
    使用Spring和Hibernate(注釋版)的一個簡單的專案。
  3. Spring AOP在Hibernate的事務管理
    一個例子來說明如何管理Hibernate事務與Spring AOP。
  4. Struts + Spring + Hibernate整合
    Spring、Struts和Hibernate框架整合的範例。

Spring E-mail支援

Spring 提供 MailSender 通過 JavaMail API 傳送電子郵件。

  1. 通過MailSender傳送電子郵件
    使用Spring的MailSender通過Gmail的SMTP伺服器傳送電子郵件範例。
  2. 在bean組態檔案中的電子郵件模板
    寫死所有電子郵件屬性和訊息,正文內容不是一個好的做法,應該考慮在 Spring的bean組態檔案中定義電子郵件模板。
  3. Spring傳送帶附件的Email
    使用Spring來傳送帶附件的電子郵件範例。

Spring與其它Web框架整合

Spring整合其它Web框架。

  1. Spring依賴注入servlet對談監聽器 - Spring提供了一個「ContextLoaderListener」監聽器作為一個通用的方法,以使Spring依賴注入對談監聽器應用到幾乎所有其他的web框架。
  2. Struts2+Spring整合範例 - Spring和Struts2框架整合的範例。
  3. Struts 2 + Spring + Quartz 計劃程式整合範例 - 這是一個Spring + Struts 2 + Quartz整合範例。
  4. Struts 2 + Spring + Hibernate整合範例

Spring問答

  1. 資源綑綁ResourceBundleMessageSource範例 - ResourceBundleMessageSource解決文字資訊在不同地區的最常見類。
  2. 存取MessageSource的bean(MessageSourceAware) - 一個用來說明如何經由MessageSourceAware 介面的 bean 得到 MessageSource 的例子。
  3. 資源載入程式的getResource()範例 - Spring資源載入器提供了一個非常通用的getResource()方法來從檔案系統,類路徑或URL得到這樣的資源(文字檔案,媒體檔案,影象檔案…)。

Spring常見錯誤

一些 Spring 常見的錯誤訊息:

Spring參考文件