Spring5基礎

卡斯特梅的雨傘發表於2022-02-25

基於Spring 5.2.6 版本。

Spring概念

image.png

IOC容器

image.png

IOC底層原理的演進過程——本質就是為了高內聚,低耦合

在原始方式中,我們通過new建立物件來實現建立物件的邏輯,但是這樣做當物件路徑等發生變化時,就要修改程式碼,耦合度太高。

因此,我們引入了工廠模式來降低耦合,這樣當我們的類發生變化要進行修改時,可以不改動呼叫類,而是去修改工廠類,這樣就降低了耦合度。但是這樣子耦合度就來到了工廠類身上。

image.png

Spring在工廠類中以配置檔案加反射的方式來進一步降低耦合度,當類發生變化時,我們只需要修改配置檔案而不需要去修改程式碼,進一步降低了耦合度,這就是IOC的本質就是一個物件工廠。

即:IOC容器 = 工廠模式 + xml解析(註解)+ 反射

image.png

Spring IOC容器相關實現類

image.png

IOC進行Bean管理

概念

image.png
image.png

基於xml方式進行bean管理

set方法注入屬性

image.png
image.png

有參建構函式注入屬性

image.png
image.png

p名稱空間注入——為了簡化set方法注入的寫法,不建議使用

image.png

xml注入其他型別屬性

注入null值和xml的特殊符號

字面量:指設定屬性的固定值

]]> ,在mybatis的xml中的sql語句常用。

image.png

注入外部bean屬性——工作中最常用方式

image.png

注入內部bean屬性

如果一個bean要複用,寫在外部,如果偶爾使用甚至是一次性的,用注入內部bean屬性方式比較好。

image.png
image.png

級聯賦值注入bean屬性——建議還是用注入外部bean屬性的方式

image.png

image.png
image.png
image.png

xml注入集合屬性

在集合裡面設定普通型別值

image.png
image.png
image.png

在集合裡面設定物件型別值

image.png

提取集合作為公共部分用於注入複用

image.png
image.png

FactoryBean——工廠bean

image.png

image.png

bean的作用域

image.png
image.png
image.png

還有其他作用域(一般不使用):

request:表示bean物件在一次請求中生效。

session:表示bean物件在一次會話中生效。

bean的生命週期——重要

生命週期時指從物件建立到物件銷燬的過程。

image.png
image.png
image.png

程式碼

image.png
image.png

xml自動裝配

自動裝配要求我們只要把bean例項建立出來,在bean配置上使用autowire屬性值指定自動裝配規則,Spring就會自動幫我們注入屬性值。

手動裝配就是我們自己在xml中配置property屬性值。

image.png
image.png

xml讀取外部屬性檔案——讀取properties等配檔案的配置

以配置德魯伊資料庫連線池為例。

image.png
image.png
image.png
image.png

基於註解方式進行bean管理

image.png
image.png
image.png
image.png

屬性注入方式註解有3種

分別是@Autowired、@Qualifier、@Resource。

image.png
image.png
image.png

image.png

image.png

AOP

AOP基於動態代理實現,常見使用場景如:

  • 全域性出入參日誌的列印
  • 事務
  • 全域性異常的捕獲處理
  • 鑑權

AOP基本原理

image.png
image.png
image.png

JDK動態代理

image.png
image.png

程式碼示例

image.png
image.png
image.png
image.png

AOP術語

image.png
image.png

AspectJ基本概念和準備

image.png

切入點表示式(重點)

image.png
image.png

基於註解實現AspectJ——重點

image.png
image.png
image.png
image.png
image.png
image.png
抽取共同切入點寫法
image.png
image.png
image.png

基於XML配置檔案實現AspectJ

image.png

JDBCTemplate——相當於JDBC的封裝版——瞭解

image.png
image.png
image.png

image.png

image.png

image.png

查詢某個值——count

image.png
image.png

查詢物件

image.png

查詢物件列表

image.png

批量操作

image.png
image.png
image.png

事務管理

image.png

事務介紹

image.png
image.png

註解宣告式事務管理

image.png
image.png

宣告式事務引數配置

image.png
image.png
image.png
image.png
image.png
image.png

XML宣告式事務管理

image.png
image.png
image.png

完全註解宣告式事務管理——即使用配置類替換XML配置

image.png
image.png

Spring5新特性

整合slf4j2日誌框架

image.png

1、引入依賴

<dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.11.2</version>
    </dependency>
  </dependencies>

2、建立配置檔案——log4j2.xml

約定:配置名是固定的,放在專案resources根目錄下,否則不會生效,只會走預設沒有配置下的日誌列印配置。

<?xml version="1.0" encoding="UTF-8"?>
<!--日誌級別以及優先順序排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration後面的status用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,可以看到log4j2內部各種詳細輸出-->
<configuration status="DEBUG">
    <!--先定義所有的appender-->
    <appenders>
        <!--輸出日誌資訊到控制檯-->
        <console name="Console" target="SYSTEM_OUT">
            <!--控制日誌輸出的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </console>
    </appenders>
    <!--然後定義logger,只有定義了logger並引入的appender,appender才會生效-->
    <!--root:用於指定專案的根日誌,如果沒有單獨指定Logger,則會使用root作為預設的日誌輸出-->
    <loggers>
        <root level="DEBUG">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

image.png

@Nullable註解

image.png

Lambda表示式建立Spring容器物件

image.png

Spring5支援整合JUnit5——單元測試必備——重點

image.png
image.png
image.png

重點使用@SpringJUnitConfig複合註解來進行單元測試

image.png

SpringWebflux

核心是:基於reactor的響應式程式設計和基於java8的函數語言程式設計

gateway基於webflux來實現,普通的服務基於springmvc實現,像閘道器這種需要處理更多的請求的場景用webflux來非同步非阻塞處理請求更加方便,可以在有限的資源中處理更多的請求。

響應式程式設計類似於電子表格中的計算,就是觀察者模式。

同步與非同步,阻塞與非阻塞

拿等公交車舉例:你在公交車站等公交車,你是呼叫者,你在等公交車時就是等著,不幹其他的,就是同步,你在等車時順便聽聽歌,看看新聞,就叫非同步;而公交車在收到你等待它的訊息時,公交車是被呼叫者,如果他馬上回應你,等車到站了才告訴你我車到了,叫做阻塞,而如果公交車馬上回應你,說我還有3分鐘到站,就是非阻塞。

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

基於註解程式設計模型

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

基於函數語言程式設計模型

image.png
image.png
image.png
image.png
image.png
image.png

Spring5重點掌握點總結

image.png
image.png
image.png

參考

尚矽谷Spring5框架

相關文章