認識 Spring 框架
Spring 框架是 Java 應用最廣的框架,它的成功來源於理念,而不是技術本身,它的理念包括 IoC (Inversion of Control,控制反轉) 和 AOP(Aspect Oriented Programming,面向切面編程)。
什么是 Spring:
- Spring 是一個輕量級的 DI / IoC 和 AOP 容器的開源框架,來源於 Rod Johnson 在其著作《Expert one on one J2EE design and development》中闡述的部分理念和原型衍生而來。
- Spring 提倡以“最少侵入”的方式來管理應用中的代碼,這意味着我們可以隨時安裝或者卸載 Spring
- 適用范圍:任何 Java 應用
- Spring 的根本使命:簡化 Java 開發
盡管 J2EE 能夠趕上 Spring 的步伐,但 Spring 並沒有停止前進, Spring 繼續在其他領域發展,而 J2EE 則剛剛開始涉及這些領域,或者還沒有完全開始在這些領域的創新。移動開發、社交 API 集成、NoSQL 數據庫、雲計算以及大數據都是 Spring 正在涉足和創新的領域。Spring 的前景依然會很美好。
Spring 中常用術語:
- 框架:是能完成一定功能的半成品。
框架能夠幫助我們完成的是:項目的整體框架、一些基礎功能、規定了類和對象如何創建,如何協作等,當我們開發一個項目時,框架幫助我們完成了一部分功能,我們自己再完成一部分,那這個項目就完成了。 - 非侵入式設計:
從框架的角度可以理解為:無需繼承框架提供的任何類
這樣我們在更換框架時,之前寫過的代碼幾乎可以繼續使用。 - 輕量級和重量級:
輕量級是相對於重量級而言的,輕量級一般就是非入侵性的、所依賴的東西非常少、資源占用非常少、部署簡單等等,其實就是比較容易使用,而重量級正好相反。 - JavaBean:
即符合 JavaBean 規范的 Java 類 - POJO:即 Plain Old Java Objects,簡單老式 Java 對象
它可以包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實現任何其它Java框架的類或接口。
注意:bean 的各種名稱——雖然 Spring 用 bean 或者 JavaBean 來表示應用組件,但並不意味着 Spring 組件必須遵循 JavaBean 規范,一個 Spring 組件可以是任意形式的 POJO。
容器:在日常生活中容器就是一種盛放東西的器具,從程序設計角度看就是裝對象的的對象,因為存在放入、拿出等操作,所以容器還要管理對象的生命周期。
Spring 的優勢
- 低侵入 / 低耦合 (降低組件之間的耦合度,實現軟件各層之間的解耦)
- 聲明式事務管理(基於切面和慣例)
- 方便集成其他框架(如MyBatis、Hibernate)
- 降低 Java 開發難度
- Spring 框架中包括了 J2EE 三層的每一層的解決方案(一站式)
Spring 能幫我們做什么
①.Spring 能幫我們根據配置文件創建及組裝對象之間的依賴關系。
②.Spring 面向切面編程能幫助我們無耦合的實現日志記錄,性能統計,安全控制。
③.Spring 能非常簡單的幫我們管理數據庫事務。
④.Spring 還提供了與第三方數據訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板來方便數據庫訪問。
⑤.Spring 還提供與第三方Web(如Struts1/2、JSF)框架無縫集成,而且自己也提供了一套Spring MVC框架,來方便web層搭建。
⑥.Spring 能方便的與Java EE(如Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。
Spring 的框架結構
- Data Access/Integration層包含有JDBC、ORM、OXM、JMS和Transaction模塊。
- Web層包含了Web、Web-Servlet、WebSocket、Web-Porlet模塊。
- AOP模塊提供了一個符合AOP聯盟標准的面向切面編程的實現。
- Core Container(核心容器):包含有Beans、Core、Context和SpEL模塊。
- Test模塊支持使用JUnit和TestNG對Spring組件進行測試。
Spring IoC 和 DI 簡介
IoC:Inverse of Control(控制反轉)
- 讀作“反轉控制”,更好理解,不是什么技術,而是一種設計思想,就是將原本在程序中手動創建對象的控制權,交由Spring框架來管理。
- 正控:若要使用某個對象,需要自己去負責對象的創建
- 反控:若要使用某個對象,只需要從 Spring 容器中獲取需要使用的對象,不關心對象的創建過程,也就是把創建對象的控制權反轉給了Spring框架
- 好萊塢法則:Don’t call me ,I’ll call you
一個例子
控制反轉顯然是一個抽象的概念,我們舉一個鮮明的例子來說明。
在現實生活中,人們要用到一樣東西的時候,第一反應就是去找到這件東西,比如想喝新鮮橙汁,在沒有飲品店的日子里,最直觀的做法就是:買果汁機、買橙子,然后准備開水。值得注意的是:這些都是你自己“主動”創造的過程,也就是說一杯橙汁需要你自己創造。
然而到了今時今日,由於飲品店的盛行,當我們想喝橙汁時,第一想法就轉換成了找到飲品店的聯系方式,通過電話等渠道描述你的需要、地址、聯系方式等,下訂單等待,過一會兒就會有人送來橙汁了。
請注意你並沒有“主動”去創造橙汁,橙汁是由飲品店創造的,而不是你,然而也完全達到了你的要求,甚至比你創造的要好上那么一些。
編寫第一個 Spring 程序
- 新建一個空的 Java 項目,命名為【spring】
- 新建一個名為【lib】的目錄,並添加進必要的 jar 包,導入項目
參考: