Spring初步認識-(1)

蓋了帽了我的老Baby發表於2020-12-06

Spring初步認識-(1)

Spring:為了適應企業級系統的大規模,即:使用者數量大資料規模大功能眾多效能和安全的要求高業務複雜靈活應變的需求而產生的輕量級框架,

以上目的,由以下四個策略來實現:

  1. 基於POJO(Plain Old Java Object普通Java類)的輕量級和最小入侵性程式設計
  2. 通過依賴注入和麵向介面實現鬆耦合
  3. 基於切面的慣例進行宣告式程式設計
  4. 通過切面和模板減少樣板式程式碼

內容:IOC 容器,AOP實現資料訪問支援簡化JDBC/ORM框架宣告式事務 WEB整合

設計理念:面向Bean的程式設計

核心技術

控制反轉(IOC : Inversion of Control)/依賴注入(DI :Dependency Injection)

面向切面程式設計:(AOP: Aspect Oriented Programming)

優點

  1. 低侵入式設計(去除此框架後,只需要修改一些配置資訊,程式碼的汙染極低)
  2. 獨立於各大中應用伺服器
  3. 依賴注入的特性將元件關係透明化 ,降低了業務物件替換的複雜性,提高了元件之間的解耦
  4. 高內聚,低耦合
  5. AOP支援將一些通用的任務和安全、事務、日誌等進行集中式管理,從而提供了更好的複用

Spring框架是一個分層框架,包含了一系列的功能要素得分為大約20個模組
在這裡插入圖片描述
控制反轉(IOC)/依賴注入(DI)

將元件物件的控制權 從程式碼本身轉移到外部容器的思想:分離關注點,使用介面,不在關注實現(也就是由外部的IOC容器來控制元件物件的建立、銷燬,不需要我們去實現類)

spring 的出現,解耦合不同類之間的依賴,誰需要誰,都找 spring,一切由spring提供,不需要自己將類例項化

依賴注入:將元件的構建和使用分開,和控制反轉一樣,只是表述不同

AOP(Aspect Oriented Programming)

面向切面程式設計,函數語言程式設計的一種衍生泛型。,面向…程式設計,只是關注點的不同,例如:

  • 程式導向程式設計: 就看實現一個功能需要什麼步驟,然後用程式碼表示出這些步驟就好了,不管程式碼的重用,耦合性問題。關注點是 步驟、過程。
  • 物件導向程式設計: 需要實現該功能,但是需要考慮到流程的結構,程式碼重用,耦合問題。需要先建立一個物件,對這個物件例項化實現功能。關注點是 物件。
  • 面向切面程式設計: 它關注於應用中的 核心業務 模組,而設法將一些次要的,輔助的功能統一管理,如日誌、安全、驗證等。
  1. AOP採取橫向抽取機制,取代了傳統的縱向繼承體系 重複性程式碼
  2. 經典應用:事務管理、效能監視、安全檢查、快取、日誌等等…
  3. Spring Aop 使用純Java實現,補充需要專門的編譯過程和類載入器,在執行期間通過代理方式向目標類 注入 增強程式碼
  4. AspectJ是一個基於Java語言的AOP框架,Spring 2.0開始 Spring AOP引入對Aspect 的支援,Aspect擴充套件了Java語言,提供一個專門的編譯器,在編譯時提供橫向程式碼的織入.

橫向:將一個類抽取出來,從其生命週期(時間軸)來操作,在其生命週期的不同階段加入一些可以共用的功能模組,來達到程式碼複用的目的。區別於在其原有的類上通過繼承,多型再去實現更多的功能。
在AOP中的一些概念:
1、目標類(target) , 需要被代理的類 例如 UserService

2、連線點(JoinPoint):是指那些可能被攔截的方法,例如 addUser 。。。。。

3、切入點(PointCut) 已經被增強的連線點 例如:addUser…….

4、通知/增強(advice) :增強程式碼 前置增強 後置增強 環繞增強 異常增強 最終增強

5、織入(Weaving) 是指把增強 advice 應用到目標物件target來建立新的代理物件Proxy的過程

6、代理類(Proxy)

7、Aspect(切面) 是切入點PointCut和通知advice的結合
在這裡插入圖片描述

參考: spring 框架的核心總結

相關文章