學(xué)無止境,但仍需及時(shí)總結(jié)狸捕。
自去年開始寫作以來,寫了一些關(guān)于Spring的文章众雷,今天將它們匯總起來灸拍,一方面方便大家閱讀,另一方面砾省,也是一次小的復(fù)盤總結(jié)鸡岗。
IOC
首先是Spring的IOC,也就是控制反轉(zhuǎn)编兄。
控制反轉(zhuǎn)轩性,簡單說,就是你不用再自己去new對象啦狠鸳,Spring已經(jīng)幫你new好了揣苏,而且還配送上門。
有同學(xué)說件舵,這不就是工廠模式嗎卸察?
的確,IOC用到了工廠模式铅祸,但I(xiàn)OC絕不僅僅是工廠模式坑质。
作為一個(gè)框架,Spring必須考慮临梗,如何最大程度的簡化用戶的工作:
- 如何定義一個(gè)Bean
- 如何將一個(gè)Bean注入另一個(gè)Bean
- 如何在Bean的生命周期里涡扼,提供各種“鉤子”入口,滿足用戶的定制需求
- ...
下面是之前寫過的關(guān)于IOC的文章:
- 用小說的形式講解Spring(1) —— 為什么需要依賴注入:首先盟庞,我們要問自己吃沪,為什么要使用Spring,或者說什猖,為什么要使用IOC巷波?
- Spring IoC有什么好處呢? - Javdroider Hong的回答 - 知乎:如果上面這篇文章還不能說服你使用IOC卸伞,那么看看這份回答吧 (~ ̄▽ ̄)~
- 用小說的形式講解Spring(2) —— 注入方式哪家強(qiáng):如何往一個(gè)Bean注入另一個(gè)Bean抹镊?這些方式要怎么選?
- 用小說的形式講解Spring(3) —— xml荤傲、注解和Java Config到底選哪個(gè):如何配置一個(gè)Bean垮耳?這些方式又孰優(yōu)孰劣?
- 怎么閱讀Spring源碼? - Javdroider Hong的回答 - 知乎:上面三篇文章都是講IOC使用層面的终佛,是時(shí)候了解一下原理了俊嗽,一方面讓自己遇到Bug時(shí)心里不慌,另一方面也是學(xué)習(xí)一下別人寫代碼的藝術(shù) ?(?>?<?)?
橋梁 —— BeanPostProcessor
很多書在講Spring的時(shí)候铃彰,往往講完IOC绍豁,就講AOP了,似乎AOP和IOC是兩個(gè)互不相干的功能牙捉。
實(shí)際上竹揍,雖然AOP和IOC確實(shí)是兩個(gè)不同的領(lǐng)域,但是既然是Spring AOP邪铲,那么AOP創(chuàng)建的代理對象芬位,也必須交給Spring容器去管理,所以也就有了這篇文章:BeanPostProcessor —— 連接Spring IOC和AOP的橋梁
這篇文章里带到,你會(huì)看到昧碉,Spring在Bean初始化的過程中,留下一些“鉤子”入口的重要性揽惹,同時(shí)可以了解到被饿,AOP是如何利用這個(gè)鉤子,把代理對象放到Springe容器的搪搏。
Spring事務(wù)和AOP
是的锹漱,我并沒有寫直接以AOP為主題的文章,一方面是懶慕嚷,另一方面也是因?yàn)橹苯又vAOP哥牍,會(huì)比較枯燥。
我選擇的是去講Spring源碼里面喝检,一個(gè)利用了IOC和AOP來搭建的模塊——Spring Transaction
通過對Spring事務(wù)的講解嗅辣,我們不僅僅學(xué)到了如何使用Spring事務(wù),還加深了對IOC的理解挠说,并且看到了AOP的實(shí)際應(yīng)用澡谭,一舉三得:
- 什么是面向切面編程AOP? - Javdroider Hong的回答 - 知乎 :雖然沒有寫過AOP的文章损俭,但是還是回答過一個(gè)問題的蛙奖,簡單了解下什么是AOP
- 玩轉(zhuǎn)Spring —— 消失的事務(wù) :通過一段簡單的代碼片段,初步了解了@Transactional注解的原理杆兵,也了解了AOP中代理對象的原理
- Spring的統(tǒng)一事務(wù)模型:研究了Spring編程式事務(wù)的實(shí)現(xiàn)原理雁仲,還順便學(xué)習(xí)了兩種模式(模板模式、策略模式)和ThreadLocal
- Spring的聲明式事務(wù)模型:深入研究了@Transactional注解的原理琐脏,同時(shí)往更深層次看了AOP的源碼
尾聲
當(dāng)然攒砖,Spring還有很多高大上的功能缸兔,然而,這些個(gè)高大上的功能吹艇,都是建立在IOC和AOP的基礎(chǔ)上的惰蜜,諸如上面講到過的Transaction、還有DAO support受神、Spring MVC抛猖、對JavaEE應(yīng)用的集成(JMS/Cache/Email)等等。
所以你會(huì)發(fā)現(xiàn)鼻听,不管是Spring官方文檔财著,或者是Spring的書籍,前面兩章精算,無一例外,都是IOC和AOP碎连。
有了IOC和AOP的基礎(chǔ)灰羽,再去學(xué)習(xí)其他模塊,就會(huì)輕松很多鱼辙,更容易看出其他模塊的精髓廉嚼。
最后再推薦一些學(xué)習(xí)資料。
其實(shí)學(xué)習(xí)資料這些東西倒戏,對于一項(xiàng)成熟的怠噪、有強(qiáng)大生態(tài)的技術(shù)來說,無非就那幾樣:
1杜跷、幾本好書
對于Spring傍念,推薦這兩本書:《Spring實(shí)戰(zhàn)》 + 《Spring揭秘》
就像之前在初學(xué)Spring有沒有適合的書? - Javdroider Hong的回答 - 知乎說的:
第一本告訴你怎么用Spring
第二本給你簡單展示如何用的同時(shí)葛闷,還告訴你Spring是怎么實(shí)現(xiàn)的
兩者一起憋槐,讓你知其然并知其所以然,絕配淑趾。
2阳仔、官方文檔
書籍是作者學(xué)習(xí)吸收后的成果,只能算是二手學(xué)習(xí)資料扣泊。
官方文檔才是一手的學(xué)習(xí)資料近范,最靠近知識(shí)的源頭。由于前面你已經(jīng)看了書籍延蟹,可以說常用的80%的功能你都了解了评矩,剩下的20%,也許就得從官方文檔里去挖掘了阱飘。
當(dāng)然稚照,英文好的同學(xué),上來直接看官方文檔也是可以的 (〃'▽'〃)
3、搜索引擎
推薦兩個(gè)搜索引擎果录,1上枕、谷歌 2、知乎
學(xué)習(xí)的樂趣在于不斷提問弱恒、不斷發(fā)現(xiàn)知識(shí)盲點(diǎn)辨萍,然后再不斷的去搜索和解決問題。
以上返弹,希望對你學(xué)習(xí)Spring锈玉,能有所幫助。