Spring初識
阿新 • • 發佈:2020-07-29
初識Spring
- 一個開源框架,Rod Johnson建立,為解決複雜的企業應用開發而建立。
- 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應用
- 根本目的:簡化Java開發
(題外話:儘管 J2EE(Java 2 Platform Enterprise Edition) 能夠趕上 Spring 的步伐,但 Spring 並沒有停止前進,移動開發、社交 API 整合、NoSQL 資料庫、雲端計算以及大資料都是 Spring 正在涉足和創新的領域。Spring 的前景依然會很美好。)
術語介紹
- 框架 :一種 半成品 ,可以幫我們實現一定的基礎功能,規定類和物件的建立方法,使用了框架進行開發,相當於已經完成了一部分基礎,我們只需要完成另一部分基礎就可以完成開發。
- 非侵入式設計 :從框架的角度來看,可以理解為: 無需框架提供類 。這樣在更換框架的時候,可以更加方便, 拒絕了對框架的依賴 。
- 輕量級與重量級 :輕量級一般為 非入侵性、依賴少、資源佔用少、部署簡單 等,而重量級恰好相反。
- JavaBean :符合 JavaBean 規範的 Java 類。(JavaBean屬性名要求:前兩個字母要麼都大寫,要麼都小寫。其實在用IDEA、Eclipse編寫時IDE也有提示。)
- POJO :即 Plain Old Java Objects , 簡單老式 Java 物件 ,它可以包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實現任何其它Java框架的類或介面。
註明 :雖然Spring是用JavaBean來表示元件,但是使用的時候不是必須遵循。
- 容器 :從程式設計來說,是 裝物件的物件 ,具有放入拿出等操作,也可以 管理物件的生命週期 。
Spring優勢
- 低侵入性/低耦合性
- 宣告式事務管理 (在切面會提到是什麼)
- 方便整合其他框架
- 降低開發難度 (顯然)
- 對J2EE有一站式的解決方案
框架結構:
學習這個框架還有很多自己慢慢搜吧 啊哈哈
IOC/DI與AOP
IOC:Inverse of Control(控制反轉)
- 不是技術而是 思想 就是將手動建立物件的控制權交給Spring框架管理。
- 正控 :若要使用物件,需要自己負責物件建立。
- 反控 :若要使用物件,只需要從Spring容器獲取物件,不關心建立過程,也就是控制反轉給了Spring框架。
- 相當於好萊塢法則 :不要給我們打電話,我們會給你打電話(don't call us, we'll call you),把權力交給對方完全控制。
- 栗子
我想吃土豆絲- 正控:買土豆-》切土豆-》炒土豆 (建立過程)
- 反控:去餐廳-》點一份土豆絲(描述需求)-》服務員送上來(滿足需求)
DI:Dependency Injection(依賴注入)
- Spring 建立物件的過程中,將物件依賴屬性(簡單值,集合,物件)通過配置設值給該物件。
AOP:Aspect Oriented Programming(面向切面程式設計)
首先把功能分為核心業務和周邊功能。
-
功能
- 核心業務 ,即 登入、增刪查改等。
- 周邊功能 ,即 效能監視、執行日誌、事務管理等。
那麼 這裡的 周邊功能 其實就是AOP裡面的 切面 。
AOP的思想 就是, 核心和切面,分開單獨開發,然後再將兩個結合在一起 。 -
為什麼這麼做?
AOP可以將那些與核心沒有關係,但是卻需要核心呼叫的邏輯服務(如事務處理、日誌管理、許可權控制、效能監視等)封裝起來,減少系統的重複程式碼,降低模組耦合度,利於系統的擴充套件與維護。(也就是將多餘的切面封裝起來,讓核心開發更加簡單。)
-
一些概念
- 切入點(Pointcut)
在哪些類、方法裡切入 (where) - 通知(Advice)
方法執行的什麼地方做什麼(where-》do what) - 切面(Aspect)
切面 = 切入點 + 通知,也就是在什麼時候什麼地方做什麼 - 編織(Weaving)
將切面編織入物件中,創建出代理物件。(Spring的任務)
- 切入點(Pointcut)