第一章
以往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