基於Spring 5.2.6 版本。
Spring概念
IOC容器
IOC底層原理的演進過程——本質就是為了高內聚,低耦合
在原始方式中,我們通過new建立物件來實現建立物件的邏輯,但是這樣做當物件路徑等發生變化時,就要修改程式碼,耦合度太高。
因此,我們引入了工廠模式來降低耦合,這樣當我們的類發生變化要進行修改時,可以不改動呼叫類,而是去修改工廠類,這樣就降低了耦合度。但是這樣子耦合度就來到了工廠類身上。
Spring在工廠類中以配置檔案加反射的方式來進一步降低耦合度,當類發生變化時,我們只需要修改配置檔案而不需要去修改程式碼,進一步降低了耦合度,這就是IOC的本質就是一個物件工廠。
即:IOC容器 = 工廠模式 + xml解析(註解)+ 反射
Spring IOC容器相關實現類
IOC進行Bean管理
概念
基於xml方式進行bean管理
set方法注入屬性
有參建構函式注入屬性
p名稱空間注入——為了簡化set方法注入的寫法,不建議使用
xml注入其他型別屬性
注入null值和xml的特殊符號
字面量:指設定屬性的固定值
]]> ,在mybatis的xml中的sql語句常用。
注入外部bean屬性——工作中最常用方式
注入內部bean屬性
如果一個bean要複用,寫在外部,如果偶爾使用甚至是一次性的,用注入內部bean屬性方式比較好。
級聯賦值注入bean屬性——建議還是用注入外部bean屬性的方式
xml注入集合屬性
在集合裡面設定普通型別值
在集合裡面設定物件型別值
提取集合作為公共部分用於注入複用
FactoryBean——工廠bean
bean的作用域
還有其他作用域(一般不使用):
request:表示bean物件在一次請求中生效。
session:表示bean物件在一次會話中生效。
bean的生命週期——重要
生命週期時指從物件建立到物件銷燬的過程。
程式碼
xml自動裝配
自動裝配要求我們只要把bean例項建立出來,在bean配置上使用autowire屬性值指定自動裝配規則,Spring就會自動幫我們注入屬性值。
手動裝配就是我們自己在xml中配置property屬性值。
xml讀取外部屬性檔案——讀取properties等配檔案的配置
以配置德魯伊資料庫連線池為例。
基於註解方式進行bean管理
屬性注入方式註解有3種
分別是@Autowired、@Qualifier、@Resource。
AOP
AOP基於動態代理實現,常見使用場景如:
- 全域性出入參日誌的列印
- 事務
- 全域性異常的捕獲處理
- 鑑權
AOP基本原理
JDK動態代理
程式碼示例
AOP術語
AspectJ基本概念和準備
切入點表示式(重點)
基於註解實現AspectJ——重點
抽取共同切入點寫法
基於XML配置檔案實現AspectJ
JDBCTemplate——相當於JDBC的封裝版——瞭解
增
刪
改
查
查詢某個值——count
查詢物件
查詢物件列表
批量操作
事務管理
事務介紹
註解宣告式事務管理
宣告式事務引數配置
XML宣告式事務管理
完全註解宣告式事務管理——即使用配置類替換XML配置
Spring5新特性
整合slf4j2日誌框架
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>
@Nullable註解
Lambda表示式建立Spring容器物件
Spring5支援整合JUnit5——單元測試必備——重點
重點使用@SpringJUnitConfig複合註解來進行單元測試
SpringWebflux
核心是:基於reactor的響應式程式設計和基於java8的函數語言程式設計。
gateway基於webflux來實現,普通的服務基於springmvc實現,像閘道器這種需要處理更多的請求的場景用webflux來非同步非阻塞處理請求更加方便,可以在有限的資源中處理更多的請求。
響應式程式設計類似於電子表格中的計算,就是觀察者模式。
同步與非同步,阻塞與非阻塞
拿等公交車舉例:你在公交車站等公交車,你是呼叫者,你在等公交車時就是等著,不幹其他的,就是同步,你在等車時順便聽聽歌,看看新聞,就叫非同步;而公交車在收到你等待它的訊息時,公交車是被呼叫者,如果他馬上回應你,等車到站了才告訴你我車到了,叫做阻塞,而如果公交車馬上回應你,說我還有3分鐘到站,就是非阻塞。
基於註解程式設計模型
基於函數語言程式設計模型
Spring5重點掌握點總結