1. 程式人生 > 實用技巧 >Spring初識

Spring初識

初識Spring

  • 一個開源框架,Rod Johnson建立,為解決複雜的企業應用開發而建立。
  • Spring 框架是 Java 應用最廣的框架,它的 成功來源於理念,而不是技術本身 ,它的理念包括 IoC (Inversion of Control,控制反轉)AOP(Aspect Oriented Programming,面向切面程式設計)

什麼是Spring?

  1. Spring 是一個 輕量級DI / IoC 和 AOP 容器的開源框架 ,來源於 Rod Johnson 在其著作《Expert one on one J2EE design and development》中闡述的部分理念和原型衍生而來。
  2. 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的任務)