Spring5基礎

基於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框架

Tags: