《 Spring 實戰 》(第4版) 讀書筆記 (未完結,更新中...)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

Pxx? 表示在書的第 xx 頁。

Spring 框架的核心是 Spring 容器。

1. (P7.) 構造器注入是依賴注入的方式之一。

緊耦合:在 A 類的無參構造器中直接 new 出一個 B 類。

Spring 松耦合:在 A 類中使用有參構造器,把 B 類的超類類型 X 作為構造參數傳入。

這樣不需要 A 類管理 B 類,并且可以根據不同情況傳入不同的實際參數,只是 X 的子類就可以注入到 A 中使用。A

2. (P15) .A 類中有一個 x 方法,B 類有 y ,z 方法。在 x 方法執行前后分別執行 y,z 方法要顯示的寫出調用代碼 。

Spring aop :把 A 類聲明為一個切面。把 A 聲明為一個 bean , 定義切入點 ( 包含 x 方法 ) ,分別配置 y,z 為前置、后置通知。這樣 A 類完全不知情時就已經調用執行 B 類的對應方法了。

3. (P34.) 裝配 (wiring):創建應用對象之間協作關系的行為,這也是依賴注入(DI)的本質。

Spring 有三種主要裝配機制:在 xml 中進行顯示配置、在 java 中進行顯示配制、隱式的 bean 發現機制和自動裝配。

Spring? 從兩個角度來實現自動化裝配 :組件掃描 (component scanning)- Spring 會自動發現應用上下文中所創建的 bean 。
自動裝配 (autowiring) - Spring 自動滿足 bean 之間的依賴。

4. (P37.)? 掃描包的方式:

1)@ComponentScan 默認會掃描與配置類相同包的類。

2)指定掃描包: @ComponentScan(basePackages="單個類名")、 @ComponentScan(basePackages={“第一個包名”,“第N個包名”}) 、@ComponentScan(basePackagesClasses={A.class,B.class})?

最后一種方式利于重構代碼,A 、B 類是接口類型的話,改變實現類的類名,在掃描包時不受影響。

5.?(P38.)?

import?static org.junit.Assert.*; 導入此類,可以調用方法 assertNotNull(要檢查的對象);   來檢查對象是否為 null 。

6?.?(P38.) Spring 應用上下文中所有的 bean 都會給寫一個 ID , 這個 bean 所給寫的 ID 為類名的第一個字母變小寫。

可以顯示的給 bean 命名,有 2 種方式 :@Compnent ("這個位置寫名字") 、@Named ("這個位置寫名字") 。

----------?---------- ---------- ---------- ---------- ---------- ---------- ---------- 創建于 2018.11.10?

7?.?(P41.) 注解 @Autowired? 可用在構造方法上,屬性的 Setter 方法上,以及任何方法上。當有且僅有一個 bean 匹配依賴需求,就會裝配起來。當沒有匹配時會拋出異常。此時可設置 @Autowired 的屬性 required 為 false :@Autowired(required = false),不作檢查,但這樣沒有匹配到 bean ,則 bean 處于未裝配狀態,如果代碼也未作 null 檢查,可能會出現 NPE(空指針異常)。

@Autowired 可用@Inject 代替。

8?.?(P44.)? JavaConfig 是配置代碼,不包含任何業務邏輯,應當單獨放到一個包中。

9 .?(P45.)? @Bean 會告訴 Spring? 這個方法將會返回一個對象,該對象要注冊為 Spring 應用上下文中的 bean 。bean 的 ID 與帶有 @Bean 注解的方法名是一樣的。設置不同名字可以重命名方法名,也可以通過 name 屬性指定不同的名字:@Bean(name = "新名字") 。

10 .?(P48.)? 可用 Spring? Tool? Suite 創建 XML 配置文件,并可選擇對應的命名空間。

11 .?(P49.)? XML 中的 <bean> 類似于 JavaConfig 中的 @Bean 。 <bean class = "此處要寫全限定名(全類路徑)"> 。

Spring 發現 <bean> 默認調用構造器創建 bean。

12 .?(P56.)? 裝配通用規則:對于強依賴使用構造器注入,對于可選性的依賴使用屬性注入。

在 XML 中,<property> 對應屬性的 Setter 方法,<constructor-arg> 對應類的構造器。

13 .?(P62.)? 導入其它配置

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 更新于 2018.11.11

14. (P62.)? @Profile(“dev”) 注解指定 bean 屬于哪一個 profile 。當注解應用配置在類級別上時,表示Spring 這個配置類中的 bean只有在 dev profile 激活時才會創建。若?dev profile 沒有激活,那么帶有@Bean 注解的方法都會被忽略掉。

Spring 確定哪個 profile 處于激活狀態,依賴兩個獨立的屬性:spring.profiles.active 和 spring.profiles.default 。可以有多種配置方式來設置這兩個屬性:1)作為 DispatcherServlet 的初始化參數。2)作為 web 應用上下文參數。3)作為 JNDI 條目。4)作為環境變量。5)作為 JVM 的系統屬性。6)在集成測試類上,使用 @ActiveProfiles 注解設置。

15. (P75.)? 只有滿足某種條件才創建 bean ,即條件化,使用注解: @Conditional ( Xxx.class ) 。xxx可以傳一個任意的實現了Conditon 接口的實現類。

16. (P80.)? 當只有一個 bean 匹配時,Spring 會自動裝配。多個 bean匹配時,確定首選 bean 的方式 :

@Primary + @Component 組合,或者 @Bean + @Component 組合,多個 bean匹配時,可以確定優先選擇對象。

XML 中可以配置 :

 <bean id="xxx" class ="xxxx" primary ="true" > 來確定首選 bean 。

17. (P81.)? 指定注入 bean 方式: @Autowired + @Qualifier(" 要注入的 bean 的ID ") 。這種方式是和類名緊耦合的。

可以用自定義限定符注解 :在一個類 A 上加上注解 @Qualifier("cold") 假定表示這個類有 cold 特性。

同時把 bean? 交給 Spring 管理,于是在 A 類上就有2個注解 :@Component + @Qualifier("這個位置是特性,可任意填寫") 或者:@Bean?+ @Qualifier("特性描述") 。

當有多個特性時是不能把 @Qualifier 寫多次的,會編譯報錯。這時就用處定義注解:public @interface Cold( ) ...?public @interface Red( ) ... 等。

當在方法上、類上要注入對應特性 bean 時注解寫為:@Component + @Cold + @Red ,組合起來使用就行了。

18. (P84.) Sprng 應用上下文中的所有 bean 都是單例的,不論注入多少次,每次注入的都是同一個 bean。

指定作用域來創建 bean 使用注解:@Scope("prototype") 表示該 bean? 作用域類型為 原型類型。可用常量代替“prototype” ,且常量更安全。

可以基于作用域來創建 bean :1.單例(Singleton):在整個應用中,只創建一個實例。2.原型(Prototype):每次注入或者通過 Spring 應用上下文獲取的時候,都會創建一個新的 bean 實例。3.會話(Session):在 web 應用中,為每個會話創建一個 bean 實例。4.請求(Request):在 web 應用中,為每個請求創建一個 bean 實例。

可以在 XML 中配置為:

<bean id ="xxx" class="xxx" scope="prototype">  表示作用域類型為:原型類型

?應用場景如:購物車則把作用域設置為:會話類型。

其實,注入的并不是真正的 bean ,而是一代理對象,代理對象會報露出與原 bean 相同的方法,當service 真正調用該方法時,代理會對其進行懶解析,并將調用委托給會話作用域內真正的 bean。

19. (P89.) Spring 提供了兩種在運行時求值的方式:屬性占位符(Property placeholder)、Spring 表達式語言 (SpEL)。

注入外部值可以用 Spring Environment 來檢索屬性。

20. (P103.) Spring 切面有 5 種類型:

1.前置通知(Before):在目標方法被調用前 調用通知功能。2.后置通知(After):在目標方法完成之后 調用通知,此時不關心方法的輸出是什么。3.返回通知(After-returnning):在目標方法成功執行之后 調用通知。4.異常通知(After-throwing):在目標方法拋出異常后 調用通知。5.環繞通知(Around):通知包裹了被通知的方法,在被通知方法調用之前和調用之后執行的自定義行為。

21. (P105.) Spring 提供了 4 種類型的 AOP 支持:

1.基于代理的經典 Spring AOP。2.純 POJO 切面。3.@AspectJ 注解驅動切面。4.注入式 Aspect 切面 (適用于 Spring 各個版本)。

22. (P106.) Spring 的切面由包裹了目標對象的代理類實現。代理類處理方法的調用,執行額外的切面邏輯,并調用目標方法。

23. (P110.)? 注解 @Aspect 用于定義切面。

切點定義方式:

@Pointcut(“execution( ** xxx.xxx.xxx.類名.方法名(..))”)  

也可以把以上這一行注解給在一個空參 void 方法 A 上。在其它方法上通知注解的切點寫法為:@Before( "A"?),表示 這個前置通知的切點同于 A 方法的切點。

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 更新于 2018.11.16

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構排序法之希爾排序法(Shell Sort)

希爾排序&#xff0c;也叫遞減增量排序&#xff0c;是插入排序的一種更高效的改進版本。希爾排序是不穩定的排序算法。 希爾排序是基于插入排序的以下兩點性質而提出改進方法的&#xff1a; 1、插入排序在對幾乎已經排好序的數據操作時&#xff0c;效率高&#xff0c;即可以達…

Windows To Ghost系統封裝之必備軟件集 - 好壓

好壓壓縮軟件&#xff08;HaoZip&#xff09;是強大的壓縮文件管理器&#xff0c;是完全免費的新一代壓縮軟件&#xff0c;相比其它壓縮軟件系統資源占用更少&#xff0c;有更好的兼容性&#xff0c;壓縮率比較高。 它提供了對ZIP、7Z和TAR文件的完整支持&#xff0c;能解壓RAR…

js 彈窗并定時關閉

1. $(input).click(function() {prompt(點擊成功, 2000) })function prompt(newName, time, fn) {var $div $(<div></div>);$div.css({position: fixed,top: 0,left: 0,width: 100%,height: 100%,z-index: 200,background-color: rgba(0,0,0,0.4),// background-c…

數據結構排序法之插入法

插入排序是一種簡單直觀的排序算法。它的工作原理非常類似于我們抓撲克牌。 對于未排序數據(右手抓到的牌)&#xff0c;在已排序序列(左手已經排好序的手牌)中從后向前掃描&#xff0c;找到相應位置并插入。 插入排序在實現上&#xff0c;通常采用in-place排序&#xff08;即…

XSLT學習筆記

1. 樣式聲明&#xff1a;<xsl:stylesheet>或<xsl:transform> 2. XSLT常用元素&#xff1a; 2.1 <xsl:template>&#xff1a;創建模板 Match屬性的作用是使模板和XML元素相關聯 e.g.:<xsl:template match"\">......</xsl:template&g…

職場:人生從沒有最佳時機!一個離職客服人員的領悟

每個人都有感到失落迷惘的時候。 人生用專制又霸道的方式運行著&#xff0c;每當我們心想一切塵埃落定、生活穩固的時候&#xff0c;生活總愛給我們驚喜&#xff0c;粉碎我們短暫的安逸&#xff0c;讓我們不得不重新思考。 「我走對路了嗎?」 「我能夠賺更多錢、爬到更高的地位…

VS Code 的常用快捷鍵

VS Code 的常用快捷鍵和插件 一、vs code 的常用快捷鍵 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、注釋&#xff1a; a) 單行注釋&#xff1a;[ctrlk,ctrlc] 或 ctrl/ b) 取消…

vue-axios interceptors

import axios from axios import cookie from js-cookie const options {baseURL: window.location.protocol process.env.BASE_API,headers: {},timeout: 20000 } const fetch axios.create(options)// request攔截器 fetch.interceptors.request.use(config > {if (coo…

數據結構排序法之雞尾酒排序法he快速排序法

雞尾酒排序&#xff0c;也叫定向冒泡排序&#xff0c;是冒泡排序的一種改進。此算法與冒泡排序的不同處在于從低到高然后從高到低&#xff0c;而冒泡排序則僅從低到高去比較序列里的每個元素。他可以得到比冒泡排序稍微好一點的效能。 // 兩兩互換 void swap (int* a, int i, …

VSCode 多開、環境對比

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 多開&#xff1a; 第一種&#xff1a;win10的開始菜單&#xff0c;在vscode圖標右鍵選擇“新開窗口”&#xff0c;這樣就多了一個vscode…

前言_工作兩年自我感觸

17年大學畢業&#xff0c;到今天整整工作兩年&#xff0c;從前端到數據分析&#xff0c;從上家公司&#xff08;簡稱A&#xff09;到現公司&#xff0c;想趁著今天是參加工作兩年的紀念日&#xff0c;回憶過往&#xff0c;結合現狀有感而發。 剛畢業的時候&#xff0c;啥都學&a…

數據結構排序法之堆排序he歸并排序

堆排序&#xff08;Heapsort&#xff09;是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構&#xff0c;并同時滿足堆性質&#xff1a;即子結點的鍵值或索引總是小于&#xff08;或者大于&#xff09;它的父節點。 堆排序的時間&#xff0c;主要由建…

超詳細設置 Idea 類注釋模板和方法注釋模板

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 網上找了一下&#xff0c;沒有很詳細且正確介紹Idea配置注釋模板的&#xff0c;于是結合多篇文章自己琢磨整理出如下。 設置類注釋模板…

手動創建兩個文本文件text1.txt和text2.txt,按要求創建text3.txt

實現在text1.txt和text2.txt文件中除去首行和末尾對應的數據&#xff0c;要求三個文本內容如下&#xff1a; text1 text2 text3begin begin begin10 11 12 15 16 17 …

感情

團結 共患難的感情轉載于:https://www.cnblogs.com/yyjh/p/11139749.html

誰搶走了中國男人的老婆?

“老夫少妻”、“包二奶”、“洋媳婦”、“單身貴族”、“丁克家庭”都是當今最時髦的詞匯。這看似“你情我愿”的現象背后竟隱藏著巨大隱患! 目前中國男女比例是119&#xff1a;100&#xff0c;某些地區已達130&#xff1a;100;中國將有5百萬以上光棍&#xff0c;這對中國社會…

latex 幻燈片演示模板

http://zzg34b.w3.c361.com/templet/slide.htm轉載于:https://www.cnblogs.com/binterminator/articles/1621647.html

Linux 文件系統編程之系統調用和標準I/O庫

系統調用 訪問設備驅動程序的底層函數主要有&#xff1a; open:打開文件或者設備。 read:從打開的文件或者設備里面讀取數據。 write:向文件或者設備寫數據。 close:關閉文件或者設備。 open系統調用&#xff1a; #include <fcntl.h> #include <sys/types.h> #in…

mysql 索引:類型 、創建

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一個簡單的對比測試 以我去年測試的數據作為一個簡單示例&#xff0c;20多條數據源隨機生成200萬條數據&#xff0c;平均每條數據源都重…

水調歌頭·中秋

轉載于:https://www.cnblogs.com/divineka/archive/2004/09/04/39560.html