Spring 基本應(yīng)用
目前,幾乎所有java項(xiàng)目都會(huì)涉及到Spring,乃至后面的SpringBoot,SpringCloud也逐步占據(jù)市場(chǎng),可見(jiàn)Spring的技術(shù)生態(tài)在Java的領(lǐng)域是多么的重要,那么就讓我們來(lái)了解Spring到底為我們解決了那些問(wèn)題呢。
在Spring官網(wǎng)提出,Spring核心提供依賴注入、事件、數(shù)據(jù)源、AOP等功能,相信做過(guò)java開(kāi)發(fā)的對(duì)Spring應(yīng)用都比較熟悉,這里就不對(duì)Spring的應(yīng)用做大量篇幅,只最常用的特性舉例。
Spring IOC DI
新建兩個(gè)User類實(shí)現(xiàn)User接口,然后構(gòu)建一個(gè)SpringIocDemo包含兩個(gè)User類
新建測(cè)試類
打印結(jié)果:
結(jié)果說(shuō)明Spring代替我們對(duì)對(duì)象進(jìn)行管理
Spring AOP
接下來(lái)對(duì)Spring第二大特性AOP進(jìn)行代碼展示,切面配置類
被增強(qiáng)的類
新建一個(gè)測(cè)試類
輸出結(jié)果:
以上介紹了Spring的重要特性進(jìn)行了簡(jiǎn)單介紹,但事實(shí)上Spring能夠做到得到遠(yuǎn)不止于此,我們以后在源碼分析的時(shí)候會(huì)進(jìn)行嵌套分析。
Spring 源碼解析準(zhǔn)備工作
在對(duì)Spring源碼解析之前,筆者認(rèn)為讀者需要具備以下基礎(chǔ)知識(shí):
1、Java反射
在Spring對(duì)bean的創(chuàng)建和屬性的注入幾乎都是采用的反射機(jī)制,所以讀者需要對(duì)反射有一定了解,否則Spring源碼理解起來(lái)會(huì)比較吃力,如果對(duì)這塊知識(shí)有所缺陷的最好彌補(bǔ)一點(diǎn)反射的基礎(chǔ)知識(shí)。
2、動(dòng)態(tài)代理
動(dòng)態(tài)代理相信小伙伴們并不陌生,就算沒(méi)用過(guò)CGLIB應(yīng)該對(duì)JDK動(dòng)態(tài)代理有所了解,簡(jiǎn)而言之就是在JVM運(yùn)行時(shí)對(duì)目標(biāo)類增強(qiáng),如果讀者對(duì)動(dòng)態(tài)代理不了解的話,筆者建議彌補(bǔ)一下在進(jìn)行下一階段學(xué)習(xí)。
3、工廠模式
工廠模式在Spring的使用可以說(shuō)是貫穿整個(gè)Spring體系的,可以說(shuō)Spring IOC的核心就是依據(jù)工廠模式的建設(shè),只不過(guò)Spring對(duì)自己的工廠建設(shè)十分龐大而有序,讀者務(wù)必了解工廠模式的基本思想,在進(jìn)行Spring的后續(xù)學(xué)習(xí)。
淺談Spirng
在沒(méi)有接觸過(guò)Spring源碼之前,一些讀者或許認(rèn)為Spring源碼并無(wú)太多懸念,無(wú)非就是用一個(gè)工廠對(duì)對(duì)象進(jìn)行封裝,甚至有些讀者能夠自己實(shí)現(xiàn)Spring的某些功能,就認(rèn)為Spring不過(guò)如此,就認(rèn)為Spring就像這樣
當(dāng)然Spring的根確實(shí)如此,但筆者認(rèn)為這不是Spring的核心,更不是Spring設(shè)計(jì)的精髓,喬布斯有一句話:求知若饑,虛心若愚。所以筆者認(rèn)為如果想深入了解Spring,就需要持有謙虛的態(tài)度。
Spring啟動(dòng)入口
在Spring官網(wǎng)指出,從Spring3.0開(kāi)始支持java代碼方式構(gòu)建Spring框架,并且個(gè)人認(rèn)為Spring也是推薦使用這種方式,從Springboot就可以看出,Spring對(duì)XML方式已經(jīng)越來(lái)越遙遠(yuǎn),為此本文將以AnnotationConfigApplicationContext作為源碼入口進(jìn)行源碼分享。
下一章節(jié)會(huì)AnnotationConfigApplicationContext作為源碼入口開(kāi)始分享源碼核心設(shè)計(jì)思想