Spring In Action研學(xué)記錄 - 第1、2章

第一章

以往struts的pojo類要實(shí)現(xiàn)很多不必要的空方法,而spring的pojo需要什么實(shí)現(xiàn)什么,不寫那么多“冗余無用”的代碼

耦合具有兩面性,且不可能避免,要小心警慎管理它們

spring的核心:依賴注入(DI)和面向切面(AOP)

AOP使用聲明的方式以模塊化的思想應(yīng)用到所需的地方,使開發(fā)人員更多地關(guān)注業(yè)務(wù)本身的開發(fā)而不是過多的關(guān)注和處理業(yè)務(wù)之外的操作

spring的容器多種多樣,但可以總結(jié)性地歸為兩種容器:bean工廠(bean factory)和應(yīng)用上下文(spring application context)。bean工廠是所有容器實(shí)現(xiàn)的基礎(chǔ),功能很簡單,開發(fā)中一般不使用它;應(yīng)用上下文基于bean工廠構(gòu)建,開發(fā)中大多使用它

spring是一個(gè)基于容器的框架,如果沒有配置spring,那么它將是一個(gè)空容器,沒有用處

spring自帶的常用到的應(yīng)用上下文類:

ClassPathXmlApplicationContext - 從類路徑下讀取XML文件中的spring bean定義

FileSystemXmlApplicationContext - 從文件系統(tǒng)讀取XML文件中的spring bean定義

XmlWebApplicationContext - 從Web應(yīng)用下讀取XML文件中的spring bean定義

spring bean在spring容器中,其生命周期,從開始的實(shí)例化到最后的銷毀,每一步都可以做精細(xì)的控制和自定義

spring框架由6個(gè)定義明確的模塊構(gòu)成

spring框架中除了最核心的依賴注入和面向切面外,spring portfolio中的spring生態(tài)集為spring框架做功能擴(kuò)展,如:web flow、web service、security、integration、batch、social、mobile(android)、dynamic modules、LDAP、rich client、.NET、flex和roo等

spring從2.5版本及以后開始支持注解配置開發(fā),增加@Autowired、@Qualifier和@Resource注解來支持bean注入;從3.0版本及以后,spring正式提供兩種配置bean的方式:XML或注解;springmvc開始支持rest,新增注解@CookieValue和@RequestHeader


總結(jié):

沒讀之前對spring portfolio這個(gè)概念基本是白癡狀態(tài)的,同時(shí)也難以想象spring居然能在這么多平臺都有涉足(尤其是非Java開發(fā)領(lǐng)域)

書中在依賴注入里舉的例子很形象,更深的理解了如果在做飯的代碼里還寫了叫孩子回來吃飯的代碼,在一定程度上是有多么的難以維護(hù)。尤其是在測試的時(shí)候

第二章

創(chuàng)建應(yīng)用對象間的協(xié)作關(guān)系行為,稱為裝配。這也是依賴注入(DI)的本質(zhì)

Java中自帶了很多用于創(chuàng)建spring bean的XML聲明時(shí)的命名空間,通過它們可以配置各種不同類型和數(shù)量的bean到spring容器中

通過XML方式使用構(gòu)造器注入bean時(shí),可以使用<constructor-arg> />設(shè)置簡單值和對象引用值

有時(shí),靜態(tài)工廠方法是實(shí)例化對象的唯一方法。單例類的實(shí)例只能通過靜態(tài)工廠方法來創(chuàng)建。spring可以通過<bean>元素的factory-method屬性來裝配工廠創(chuàng)建的bean

關(guān)鍵詞:initialization on demand holder

spring容器中的bean默認(rèn)都是單例,即總是返回bean的同一個(gè)實(shí)例。而設(shè)置bean的scope屬性為prototype可以每次返回bean的全新實(shí)例

這里要注意:spring bean的單例只能保證在每個(gè)應(yīng)用上下文中保證每個(gè)bean是一個(gè)實(shí)例

注入spring bean的屬性,如果是簡單值,可以使用<bean>元素的<property>屬性中的name和value設(shè)置屬性名對應(yīng)的屬性值,如果是對象,要先定義要引用對象的bean,然后引用時(shí)value變成ref,引用剛才創(chuàng)建的spring bean的id即可

p命名空間是<property>標(biāo)簽的簡化版

spring還可以裝配Java中的集合類型(包括Properties類型)

spring支持裝配null值

spring強(qiáng)大的spEL可以在XML中進(jìn)行動(dòng)態(tài)地、有選擇地操作bean。如:使用bean的id來引用bean、調(diào)用方法和訪問對象的屬性、對值進(jìn)行各種運(yùn)算、集合取值、過濾、正則匹配、集合快速操作(類似Java8的stream api)

雖然spEL強(qiáng)大,但通常不建議使用它,除非萬不得已。因?yàn)椴灰拙S護(hù)

投影集合是指從集合的每一個(gè)成員中選擇提取特定的屬性并放入新集合中


總結(jié):

對注入bean的幾個(gè)寫法有了進(jìn)一步的認(rèn)識,以前只是看別人這么寫也就不加思考地拿來用了,而且寫法多種多樣

spEL平時(shí)項(xiàng)目中基本沒見過,第一次聽說這東西,確實(shí)很強(qiáng)大,類似于mini版的Java8 stream api

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容