Spring實(shí)戰(zhàn)第四版

第1章 Spring之旅

所有的理念都可以追溯到Spring最根本的使命上:簡(jiǎn)化Java開(kāi)發(fā)。

Spring的非侵入編程模型意味著這個(gè)類在Spring應(yīng)用和非Spring應(yīng)用中都可以發(fā)揮同樣的作用。

創(chuàng)建應(yīng)用組件之間協(xié)作的行為通常稱為裝配

基于XML的配置還是基于Java的配置

Spring通過(guò)應(yīng)用上下文(Application Context)裝載bean的定義并把它們組裝起來(lái)贷腕。

Spring容器使用DI管理構(gòu)成應(yīng)用的組件彻舰,它會(huì)創(chuàng)建相互協(xié)作的組件之間的關(guān)聯(lián)并巍。

應(yīng)用上下文:

AnnotationConfigApplicationContext:從一個(gè)或多個(gè)
基于Java的配置類中加載Spring應(yīng)用上下文。
AnnotationConfigWebApplicationContext:從一個(gè)或
多個(gè)基于Java的配置類中加載Spring Web應(yīng)用上下文束莫。
ClassPathXmlApplicationContext:從類路徑下的一個(gè)或
多個(gè)XML配置文件中加載上下文定義髓废,把應(yīng)用上下文的定義文件
作為類資源巷懈。
FileSystemXmlapplicationcontext:從文件系統(tǒng)下的一
個(gè)或多個(gè)XML配置文件中加載上下文定義。
XmlWebApplicationContext:從Web應(yīng)用下的一個(gè)或多個(gè)
XML配置文件中加載上下文定義慌洪。

第2章 裝配Bean

Spring具有非常大的靈活性,它提供了三種主要的裝配機(jī)制:

在XML中進(jìn)行顯式配置凑保。
在Java中進(jìn)行顯式配置冈爹。
隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配。

以上幾個(gè)方法欧引,可以混合使用频伤。

1. 自動(dòng)化裝配bean

Spring從兩個(gè)角度來(lái)實(shí)現(xiàn)自動(dòng)化裝配:

組件掃描(component scanning):Spring會(huì)自動(dòng)發(fā)現(xiàn)應(yīng)用上下文
中所創(chuàng)建的bean。
自動(dòng)裝配(autowiring):Spring自動(dòng)滿足bean之間的依賴芝此。

@Component注解:這個(gè)簡(jiǎn)單的注解表明該類會(huì)作為組件類憋肖,并告知Spring要為這個(gè)類創(chuàng)建bean

@ComponentScan注解:?jiǎn)⒂昧私M件掃描

Spring應(yīng)用上下文中所有的bean都會(huì)給定一個(gè)ID。在前面的例子中婚苹,
盡管我們沒(méi)有明確地為SgtPeppersbean設(shè)置ID岸更,但Spring會(huì)根據(jù)類
名為其指定一個(gè)ID。具體來(lái)講膊升,這個(gè)bean所給定的ID
為sgtPeppers怎炊,也就是將類名的第一個(gè)字母變?yōu)樾憽?/p>

@Configuration注解表明這個(gè)類是一個(gè)配置類,該類應(yīng)該包含在Spring應(yīng)用上下文中如何創(chuàng)建bean的細(xì)節(jié)。

@Bean注解會(huì)告訴Spring這個(gè)方法將會(huì)返回一個(gè)對(duì)象评肆,該對(duì)象要注冊(cè)為Spring應(yīng)用上下文中的bean债查。

Spring定義了多種作用域,可以基于這些作用域創(chuàng)建bean瓜挽,包括:

單例(Singleton):在整個(gè)應(yīng)用中盹廷,只創(chuàng)建bean的一個(gè)實(shí)例。
原型(Prototype):每次注入或者通過(guò)Spring應(yīng)用上下文獲取的
時(shí)候久橙,都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例速和。
會(huì)話(Session):在Web應(yīng)用中,為每個(gè)會(huì)話創(chuàng)建一個(gè)bean實(shí)
例剥汤。
請(qǐng)求(Rquest):在Web應(yīng)用中颠放,為每個(gè)請(qǐng)求創(chuàng)建一個(gè)bean實(shí)
例。

第4章 面向切面的Spring

AOP已經(jīng)形成了自己的術(shù)語(yǔ)吭敢。描述切面的常用術(shù)
語(yǔ)有通知(advice)碰凶、切點(diǎn)(pointcut)和連接點(diǎn)(join point)。

通知:切面也有目標(biāo)——它必須要完成的工作鹿驼。在AOP術(shù)語(yǔ)中欲低,切面的工作被稱為通知。

Spring切面可以應(yīng)用5種類型的通知:

前置通知(Before):在目標(biāo)方法被調(diào)用之前調(diào)用通知功能畜晰;
后置通知(After):在目標(biāo)方法完成之后調(diào)用通知砾莱,此時(shí)不會(huì)關(guān)
心方法的輸出是什么;
返回通知(After-returning):在目標(biāo)方法成功執(zhí)行之后調(diào)用通
知凄鼻;
異常通知(After-throwing):在目標(biāo)方法拋出異常后調(diào)用通知腊瑟;
環(huán)繞通知(Around):通知包裹了被通知的方法,在被通知的方
法調(diào)用之前和調(diào)用之后執(zhí)行自定義的行為块蚌。

連接點(diǎn):連接點(diǎn)是在應(yīng)用執(zhí)行過(guò)程中能夠插入切面的一個(gè)點(diǎn)闰非。

切點(diǎn):切點(diǎn)的定義會(huì)匹配通知所要織入的一個(gè)或多個(gè)連接點(diǎn)。

切面:切面是通知和切點(diǎn)的結(jié)合峭范。通知和切點(diǎn)共同定義了切面的全部?jī)?nèi)容财松。

引入:引入允許我們向現(xiàn)有的類添加新方法或?qū)傩浴?/p>

織入:織入是把切面應(yīng)用到目標(biāo)對(duì)象并創(chuàng)建新的代理對(duì)象的過(guò)程。

在目標(biāo)對(duì)象的生命周期里有多個(gè)點(diǎn)可以進(jìn)行織入:

編譯期:切面在目標(biāo)類編譯時(shí)被織入纱控。這種方式需要特殊的編譯
器辆毡。AspectJ的織入編譯器就是以這種方式織入切面的。
類加載期:切面在目標(biāo)類加載到JVM時(shí)被織入甜害。這種方式需要特
殊的類加載器(ClassLoader)舶掖,它可以在目標(biāo)類被引入應(yīng)用
之前增強(qiáng)該目標(biāo)類的字節(jié)碼。AspectJ 5的加載時(shí)織入(load-time
weaving唾那,LTW)就支持以這種方式織入切面访锻。
運(yùn)行期:切面在應(yīng)用運(yùn)行的某個(gè)時(shí)刻被織入褪尝。一般情況下,在織
入切面時(shí)期犬,AOP容器會(huì)為目標(biāo)對(duì)象動(dòng)態(tài)地創(chuàng)建一個(gè)代理對(duì)象河哑。
Spring AOP就是以這種方式織入切面的。

Spring提供了4種類型的AOP支持:

基于代理的經(jīng)典Spring AOP龟虎;
純POJO切面璃谨;
@AspectJ注解驅(qū)動(dòng)的切面;
注入式AspectJ切面(適用于Spring各版本)鲤妥。

Spring只支持方法級(jí)別的連接點(diǎn)

Spring借助AspectJ的切點(diǎn)表達(dá)式語(yǔ)言來(lái)定義Spring切面:

注意只有execution指示器是實(shí)際執(zhí)行匹配的佳吞,而其他的指示器都是用來(lái)限制匹配的。

使用注解創(chuàng)建切面:

@AspectJ注解進(jìn)行了標(biāo)注棉安。該注解表明Audience不僅僅是一個(gè)POJO底扳,還是一個(gè)切面

Spring使用AspectJ注解來(lái)聲明通知方法:

@Pointcut注解能夠在一個(gè)@AspectJ切面內(nèi)定義可重用的切點(diǎn)。

@Around注解:環(huán)繞通知
它接受ProceedingJoinPoint作為參數(shù)贡耽。衷模。這個(gè)對(duì)象是必須要有的,因?yàn)槟阋谕ㄖ型ㄟ^(guò)它來(lái)調(diào)用被通知的方法蒲赂。通知方法中可以做任何的事情阱冶,當(dāng)要將控制權(quán)交給被通知的方法時(shí),它需要調(diào)用ProceedingJoinPoint的proceed()方法滥嘴。

需要傳入?yún)?shù)時(shí):

利用被稱為引入的AOP概念木蹬,切面可以為Spring bean添加新方法:

@DeclareParents注解由三部分組成:

value屬性指定了哪種類型的bean要引入該接口。在本例中若皱,也就是所有實(shí)現(xiàn)Performance的類型镊叁。(標(biāo)記符后面的加號(hào)表示是Performance的所有子類型,而不是Performance本
身是尖。)
defaultImpl屬性指定了為引入功能提供實(shí)現(xiàn)的類意系。在這里,我們指定的是DefaultEncoreable提供實(shí)現(xiàn)饺汹。
@DeclareParents注解所標(biāo)注的靜態(tài)屬性指明了要引入了接口。在這里痰催,我們所引入的是Encoreable接口兜辞。

Spring的AOP配置元素能夠以非侵入性的方式聲明切面:

第5章 構(gòu)建Spring Web應(yīng)用程序

Spring MVC所經(jīng)歷的所有站點(diǎn):

@EnableWebMvc注解:?jiǎn)⒂肧pring MVC
@Controller注解:聲明控制器
@RequestMapping注解:它的value屬性指定了這個(gè)方法所要處理的請(qǐng)求路徑,method屬性細(xì)化了它所處理的HTTP方法夸溶。
@RequestParam注解:逸吵?連接的參數(shù)
@PathVariable("spittleId"):寫在路徑中的參數(shù)

Java校驗(yàn)API所提供的校驗(yàn)注解:

第6章 渲染W(wǎng)eb視圖

JSP

Thymeleaf

前后端分離:

第7章 Spring MVC的高級(jí)技術(shù)

filter

7.5 跨重定向請(qǐng)求傳遞數(shù)據(jù) redirect: 前綴

第8章 使用Spring Web Flow

Spring Web Flow是Spring MVC的擴(kuò)展岩瘦,它支持開(kāi)發(fā)基于流程的應(yīng)用程序喊衫。它將流程的定義與實(shí)現(xiàn)流程行為的類和視圖分離開(kāi)來(lái)。

流程是由三個(gè)主要元素定義的:狀態(tài)摩泪、轉(zhuǎn)移和流程數(shù)據(jù)

Spring Web Flow可供選擇的狀態(tài):

Spring Web Flow的作用域:

并不是所有的Web應(yīng)用程序都是自由訪問(wèn)的。有時(shí)候韩脑,必須對(duì)用戶進(jìn)行指引氢妈、詢問(wèn)適當(dāng)?shù)膯?wèn)題并基于他們的響應(yīng)將其引導(dǎo)到特定頁(yè)面。在這些情況下段多,應(yīng)用程序不太像一個(gè)菜單選項(xiàng)而更像應(yīng)用程序與用戶之
間的對(duì)話首量。

第9章 保護(hù)Web應(yīng)用——Spring Security

Spring Security被分成了11個(gè)模塊:

過(guò)濾Web請(qǐng)求:DelegatingFilterProxy是一個(gè)特殊的Servlet Filter

@EnableWebSecurity注解將會(huì)啟用Web安全功能。web應(yīng)用下进苍,使用@EnableWebMvcSecurity替代它加缘。

預(yù)先增加驗(yàn)證用戶有以下方法。

使用基于內(nèi)存的用戶存儲(chǔ)

基于數(shù)據(jù)庫(kù)表進(jìn)行認(rèn)證

基于LDAP進(jìn)行認(rèn)證

requiresChannel()方法會(huì)為選定的URL強(qiáng)制使用HTTPS觉啊。

我們可以使用requiresInsecure()代替requiresSecure()方法拣宏,將首頁(yè)聲明為始終通過(guò)HTTP傳送。

防止跨站請(qǐng)求偽造

Spring Security已經(jīng)簡(jiǎn)化了將token放到請(qǐng)求的屬性中這一任務(wù)杠人。如果你使用Thymeleaf作為頁(yè)面模板的話勋乾,只要<form>標(biāo)簽的action屬性添加了Thymeleaf命名空間前綴,那么就會(huì)自動(dòng)生成一個(gè)“_csrf”隱藏域搜吧。

通過(guò)調(diào)用csrf().disable()禁用Spring Security的CSRF防護(hù)功能市俊。

認(rèn)證用戶

重定向到首頁(yè)登陸頁(yè)。

第10章 通過(guò)Spring和JDBC征服數(shù)據(jù)庫(kù)

第16章 RESTful架構(gòu)

@RestController注解:為控制器默認(rèn)設(shè)置消息轉(zhuǎn)換

第18章 WebSocket

WebSocket協(xié)議提供了通過(guò)一個(gè)套接字實(shí)現(xiàn)全雙工通信的功能滤奈。除了其他的功能之外摆昧,它能夠?qū)崿F(xiàn)Web瀏覽器和服務(wù)器之間的異步通信。全雙工意味著服務(wù)器可以發(fā)送消息給瀏覽器蜒程,瀏覽器也可以發(fā)送消息給服務(wù)器绅你。

第20章 使用JMX管理Spring Bean

第21章 Spring Boot

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昭躺,隨后出現(xiàn)的幾起案子忌锯,更是在濱河造成了極大的恐慌,老刑警劉巖领炫,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偶垮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡帝洪,警方通過(guò)查閱死者的電腦和手機(jī)似舵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葱峡,“玉大人砚哗,你說(shuō)我怎么就攤上這事∨檗龋” “怎么了蛛芥?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵提鸟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仅淑,道長(zhǎng)称勋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任漓糙,我火速辦了婚禮铣缠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昆禽。我一直安慰自己蝗蛙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布醉鳖。 她就那樣靜靜地躺著捡硅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盗棵。 梳的紋絲不亂的頭發(fā)上壮韭,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音纹因,去河邊找鬼喷屋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞭恰,可吹牛的內(nèi)容都是我干的屯曹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惊畏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恶耽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起颜启,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤偷俭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缰盏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涌萤,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年口猜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了形葬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暮的,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淌实,到底是詐尸還是另有隱情冻辩,我是刑警寧澤猖腕,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站恨闪,受9級(jí)特大地震影響倘感,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咙咽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一老玛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钧敞,春花似錦蜡豹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至愚战,卻和暖如春娇唯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂玲。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工塔插, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拓哟。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓想许,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親彰檬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伸刃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn)逢倍,也是為了防止忘記捧颅,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦较雕!如果你也喜歡碉哑,那...
    波波波先森閱讀 12,302評(píng)論 6 86
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)亮蒋,斷路器扣典,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • spirng介紹 為了簡(jiǎn)化java開(kāi)發(fā),spring使用4種關(guān)鍵策略: 基于POJO的輕量級(jí)和最小侵入性編程慎玖; 通...
    maxbin閱讀 450評(píng)論 0 1
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器贮尖,...
    simoscode閱讀 6,723評(píng)論 2 22
  • 文|柏慕凡 詩(shī)湿硝,我想為你寫首詩(shī) 詩(shī)不是一個(gè)姑娘薪前,就是詩(shī)。 詩(shī)关斜,拆開(kāi)看示括,言 土 寸 , 我把她解釋為語(yǔ)言扎進(jìn)土里有一...
    柏慕凡閱讀 685評(píng)論 0 1