Spring教學
Spring框架,由Rod Johnson開發,是一個非常強大的反轉控制(IOC)框架,以幫助分離項目組件之間的依賴關係。
在本系列教程,將多個步驟提供一些例子,用來學習和解釋Spring框架。
新的 Spring 4.1 教程 (2016/8/12)
增加了關於使用Spring EL,JavaConfig,AspectJ和Spring對象/XML映射(OXM)等許多Spring 4.0 的實例教程。
Spring框架相關教程(推薦)
- Spring Security教程
- Spring MVC教程
- Spring Boot教程
- Spring JDBC教程
Spring快速入門
快速入門瞭解Spring框架開發的基礎。
- Spring hello world實例 - Spring3.0的hello world實例,在新的Spring3.0開發需要什麼。
- Spring鬆耦合的實例 - 這是一個用來演示Spring是如何使組件之間鬆耦合的例子。
- Spring MVC教程 - Spring MVC系列教程。
Spring JavaConfig
Spring 3.0支持JavaConfig,現在可以使用註解來配置Spring。
- Spring JavaConfig實例 - 使用
[@Configuration](https://github.com/Configuration "@Configuration")
和[@Bean](https://github.com/Bean "@Bean")
演示到在Spring定義的bean
。 - Spring JavaConfig @Import實例 - 使用
[@Import](https://github.com/Import "@Import")
組織Bean
類模塊化的實例。
Spring 依賴注入(DI)
Spring如何使用依賴注入(DO)來管理對象的依賴關係。
- Spring依賴注入 (DI) - Spring如何通過應用
Setter
注入和構造器注入的依賴注入(DI)設計模式實例 - Spring通過setter方法注入 - 通過setter方法依賴注入Bean
- Spring通過構造方法注入 - 可以通過構造方法依賴注入Bean
- Spring構造方法注入類型歧義 - 構造函數注入參數類型歧義的問題總是發生在一個bean包含多個構造方法有多個參數。
Spring Bean基礎
在Spring IoC容器使用類就會被認爲是「Bean
」,並可在Spring bean的配置文件或者通過註解來聲明。
- Spring bean引用實例 - 如何指定相同或不同的
bean
配置文件中的bean
引用互相訪問。 - 注入值到Spring Bean的屬性 - 演示使用三種方法注入值到
bean
的屬性。 - 加載多個Spring bean配置文件 - 開發人員總是在不同的模塊文件夾歸類不同的bean配置文件,這裏有一個技巧,向您展示如何加載多個Spring bean 的配置文件。
- Spring內部Bean實例 - 每當一個bean僅用於一個特定的屬性,它總是建議將其聲明爲一個內部bean。
- Spring bean作用域 - Bean作用域是用來決定哪些bean實例的類型應該是從Spring容器中返回給調用者。
- Spring集合(List, Set, Map, and Properties)實例 - 注入值到集合類型(列表,集,映射和屬性)實例。
- ListFactoryBean實例 - 創建一個具體的列表集合類(ArrayList 和 LinkedList),並注入到 bean 屬性。
- SetFactoryBean實例 - 創建一組具體的Set集合類(HashSet和TreeSet),並注入到bean屬性。
- MapFactoryBean實例 - 創建一個具體的映射集合類(HashMap和TreeMap中),並注入到bean屬性。
- Spring注入日期到bean屬性(CustomDateEditor) - 一般情況下,Spring接受日期變量,這裏有一個技巧,那就是使用
CustomDateEditor
來解決。 - Spring PropertyPlaceholderConfigurer實例 - 通過一個特殊格式具體化部署詳情到一個屬性文件,並從
bean
配置文件訪問獲得 – ${variable} - Spring bean配置繼承 - 繼承是非常有用,一個bean來分享共同的值,屬性或配置。
- Spring依賴檢查 -
Spring4
中提供了依賴檢查模式,以確保所要求的屬性已經在bean
中設置。 - Spring使用@Required註解依賴檢查 - 依賴檢查註釋模式。
- 自定義@Required-style註解 - 創建自定義
[@Required](https://github.com/Required "@Required")-style
註解,相當於[@Required](https://github.com/Required "@Required")
註解 - Bean InitializingBean和DisposableBean實例 - 執行
bean
初始化和銷燬某些動作(接口) - Bean init-method和destroy-method實例 - 執行
bean
初始化和銷燬某些動作(XML) - Bean @PostConstruct和@PreDestroy實例 - 執行
bean
初始化和銷燬某些動作(註解)
Spring表達式語言
Spring 3.0引入了Spring表達語言,或Spring EL豐富而強大的表達式語言。
- Spring EL hello world實例 - 使用 Spring 表達式語言(EL)快速入門
- Spring EL bean引用實例 - 參考
bean
,bean
屬性使用一個點(.
)符號。 - Spring EL 方法調用實例 - 直接調用Bean方法
- Spring EL操作符實例 - Spring EL支持大多數標準的關係,邏輯和數學運算符。
- Spring EL三元操作符(if-then-else)實例 - 有條件的檢查:if else then.
- Spring EL Arrays, Lists, Maps實例 - 適用於映射和列表。
- Spring EL正則表達式實例 - 正則表達式來計算評估條件。
- Spring EL與ExpressionParser測試 - 如何組合並用於測試Spring El。
Spring自動組件掃描
Spring是能夠掃描,檢測並自動註冊 bean
的。
- Spring自動掃描組件 - 讓Spring自動掃描,檢測和註冊
Bean
。 - Spring過濾器組件自動掃描 - 過濾器自動掃描模式的某些組件實例。
Spring自動裝配Bean
Spring自動裝配「auto-wiring
「來裝配或Bean
類,無論是在XML和註釋。
- Spring自動裝配Beans - Spring有
5
種自動裝配方式總結。 - Spring按類型(Type)自動裝配 - 如果一個
bean
的數據類型是用其它bean
屬性的數據類型,那麼自動裝配它。 - Spring按名稱(Name)自動裝配 - 如果一個
bean
的名稱與其他bean
屬性的名稱是一樣的,那麼可以自動裝配它。 - Spring由構造方法自動裝配 - 由在構造函數的參數類型自動裝配。
- Spring由AutoDetect自動裝配 - 選擇「用構造函數自動裝配」,如果默認構造函數被找到,否則使用「自動裝配按類型」。
- Spring使用@Autowired註解自動裝配 - 例子來說明如何定義註解 「
auto-wiring
」 模式。 - Spring自動裝配@Qualifier實例 - 在這個例子中演示確定哪些
Bean
有資格自動裝配到某個字段上。
Spring AOP (面向方面編程)
Spring AOP的模塊化方面橫切關注點。簡單地說,就是一個攔截器攔截一些方法。
- Spring AOP通知實例(Advice) - 有關不同類型的 Spring 建議說明和示例。
- Spring AOP實例(Pointcut, Advisor) - 有關不同類型的
Spring
的切入點和Advisor
的解釋和示例。 - Spring AOP攔截器的順序 - AOP攔截器的順序會影響功能。
- 自動代理創建者實例 - 一個自動代理生成例子是用來爲
Bean
自動創建代理對象,以避免造成許多重複的代理對象。
Spring AOP + AspectJ框架
由於Spring 2.0
中對 AspectJ
更加靈活和強大的支持。然而,本實例在 Spring3.0
中應用說明。
- Spring AOP+AspectJ註解實例 - 一個例子向您展示如何將AspectJ 註解與Spring框架集成。
- Spring AOP+AspectJ 在XML配置實例 - Spring AOP 使用AspectJ 在XML基本配置。
Spring Object/XML 映射器
在Spring3.0,對象到XML映射(OXM)從Spring Web服務到核心Spring框架。
- Spring Object/XML映射實例 - Spring oxm+castor轉換對象到XML,反之亦然。
Spring JDBC支持
Spring提供了很多輔助類簡化整個 JDBC 數據庫操作。
- Spring+JDBC實例 - 一個例子來說明如何集成 Spring 和 JDBC。
- JdbcTemplate+JdbcDaoSupport實例 - 使用Spring的
JdbcTemplate
和JdbcDaoSupport
類來簡化整個JDBC數據庫操作過程的一個實例。 - Spring JdbcTemplate查詢實例 - 這裏有一些例子來說明如何使用
JdbcTemplate
的query()
方法來查詢或從數據庫中提取數據。 - Spring JdbcTemplate batchUpdate()實例 - 這裏是一個 BATCHUPDATE()例子用來說明如何執行批量插入操作。
- Spring SimpleJdbcTemplate查詢示例 - 更多的用戶查詢操作,或從數據庫中提取數據的友好而簡單的方法。
- Spring SimpleJdbcTemplate batchUpdate()實例 - 使用
SimpleJdbcTemplate
類,一個Java5 的友好補充JdbcTemplate
的一個批量更新的例子。 - Spring SimpleJdbcTemplate類命名參數實例 - 一個例子來說明如何使用命名參數作爲SQL參數值,而這僅僅是在
SimpleJdbcTemplate
中支持。
Spring Hibernate支持
Spring 提供了許多方便的類來支持 Hibernate ORM框架。
- Spring+Hibernate+MySql實例
使用 Spring 和 Hibernate 的一個簡單的項目。 - Spring + Hibernate+ MySql註解實例
使用Spring和Hibernate(註釋版)的一個簡單的項目。 - Spring AOP在Hibernate的事務管理
一個例子來說明如何管理Hibernate事務與Spring AOP。 - Struts + Spring + Hibernate集成
Spring、Struts和Hibernate框架集成的實例。
Spring E-mail支持
Spring 提供 MailSender
通過 JavaMail API 發送電子郵件。
- 通過MailSender發送電子郵件
使用Spring的MailSender通過Gmail的SMTP服務器發送電子郵件實例。 - 在bean配置文件中的電子郵件模板
硬編碼所有電子郵件屬性和消息,正文內容不是一個好的做法,應該考慮在 Spring的bean配置文件中定義電子郵件模板。 - Spring發送帶附件的Email
使用Spring來發送帶附件的電子郵件示例。
Spring與其它Web框架集成
Spring集成其它Web框架。
- Spring依賴注入servlet會話監聽器 - Spring提供了一個「ContextLoaderListener」監聽器作爲一個通用的方法,以使Spring依賴注入會話監聽器應用到幾乎所有其他的web框架。
- Struts2+Spring集成實例 - Spring和Struts2框架集成的實例。
- Struts 2 + Spring + Quartz 計劃程序集成示例 - 這是一個Spring + Struts 2 + Quartz集成實例。
- Struts 2 + Spring + Hibernate集成實例
Spring問答
- 資源捆綁ResourceBundleMessageSource示例 - ResourceBundleMessageSource解決文本信息在不同地區的最常見類。
- 訪問MessageSource的bean(MessageSourceAware) - 一個用來說明如何經由MessageSourceAware 接口的 bean 得到 MessageSource 的例子。
- 資源加載程序的getResource()示例 - Spring資源加載器提供了一個非常通用的getResource()方法來從文件系統,類路徑或URL得到這樣的資源(文本文件,媒體文件,圖像文件…)。
Spring常見錯誤
一些 Spring 常見的錯誤消息:
- Cannot proxy target class because CGLIB2 is not available
- CGLIB is required to process @Configuration classes
- java.lang.ClassNotFoundException: org.exolab.castor.xml.XMLException
- java.lang.ClassNotFoundException: org.apache.xml.serialize.XMLSerializer
Spring參考文檔
- Spring Framework (Wiki) - http://en.wikipedia.org/wiki/Spring_Framework
- Spring官方文檔 - http://www.springsource.org/documentation
- Spring 3.0文檔 - http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/