1习绢、開(kāi)發(fā)中主要使用spring的什么技術(shù)?
a)IOC容器管理各層組件
b)使用aop配置聲明式事務(wù)
2、為什么說(shuō)spring是一站式框架
3蘑斧、spring搭建
(1)導(dǎo)包:基本包+日志包
(2)創(chuàng)建一個(gè)pojo對(duì)象
(3)書(shū)寫配置注冊(cè)對(duì)象到容器
------------配置文件:applicationContext.xml
其實(shí)就是在實(shí)際編碼過(guò)程中我們是如何使用這個(gè)對(duì)象的须眷。首先是創(chuàng)建對(duì)象竖瘾,然后就是通過(guò)容器調(diào)用他的方法來(lái)獲取我們想要的對(duì)象。
4花颗、spring概念
5捕传、spring中的工廠(容器)
(1)ApplicationContext
ApplicationContext接口有兩個(gè)實(shí)現(xiàn)類:
ClassPathXmlApplicationContext:加載類路徑下的spring配置文件
FileSystemXmlApplicationContext:加載本地磁盤下的spring的配置文件
(2)ApplicationContext和BeanFactory的區(qū)別
BeanFactory接口實(shí)現(xiàn)類的容器,特點(diǎn)是每次在獲得對(duì)象的時(shí)候才會(huì)創(chuàng)建對(duì)象扩劝。
ApplicationContext接口實(shí)現(xiàn)類的容器庸论,特點(diǎn)是每次加載配置文件,容器啟動(dòng)的時(shí)候就會(huì)創(chuàng)建容器中配置的所有對(duì)象棒呛。
結(jié)論:web開(kāi)發(fā)中,使用applicationContext. 在資源匱乏的環(huán)境可以使用BeanFactory.
6聂示、spring中的bean元素----看下視頻明白一下空參構(gòu)造創(chuàng)建對(duì)象
spring中如何配置bean對(duì)象
(1)通過(guò)全類名(反射)
(2)通過(guò)靜態(tài)工廠或者實(shí)例工廠
如何創(chuàng)建bean對(duì)象
(1)空參構(gòu)造的方式bean元素屬性注入---看視頻明白set方法注入
set方法注入bean元素屬性
Bean元素:使用該元素描述需要spring容器管理的對(duì)象使用name屬性時(shí),開(kāi)發(fā)中不建議名稱重復(fù)
scope屬性:對(duì)象的作用域
四個(gè)取值對(duì)應(yīng)四個(gè)范圍
當(dāng)通過(guò)Spring容器創(chuàng)建一個(gè)Bean實(shí)例時(shí)簇秒,不僅可以完成Bean實(shí)例的實(shí)例化鱼喉,還可以為Bean指定特定的作用域。Spring支持如下5種作用域:
singleton:?jiǎn)卫J剑谡麄€(gè)Spring IoC容器中扛禽,使用singleton定義的Bean將只有一個(gè)實(shí)例
prototype:原型模式锋边,每次通過(guò)容器的getBean方法獲取prototype定義的Bean時(shí),都將產(chǎn)生一個(gè)新的Bean實(shí)例
request:對(duì)于每次HTTP請(qǐng)求编曼,使用request定義的Bean都將產(chǎn)生一個(gè)新實(shí)例豆巨,即每次HTTP請(qǐng)求將會(huì)產(chǎn)生不同的Bean實(shí)例。只有在Web應(yīng)用中使用Spring時(shí)掐场,該作用域才有效
session:對(duì)于每次HTTP Session往扔,使用session定義的Bean都將產(chǎn)生一個(gè)新實(shí)例。同樣只有在Web應(yīng)用中使用Spring時(shí)刻肄,該作用域才有效
globalsession:每個(gè)全局的HTTP Session瓤球,使用session定義的Bean都將產(chǎn)生一個(gè)新實(shí)例。典型情況下敏弃,僅在使用portlet context的時(shí)候有效卦羡。同樣只有在Web應(yīng)用中使用Spring時(shí),該作用域才有效
其中比較常用的是singleton和prototype兩種作用域麦到。對(duì)于singleton作用域的Bean绿饵,每次請(qǐng)求該Bean都將獲得相同的實(shí)例。容器負(fù)責(zé)跟蹤Bean實(shí)例的狀態(tài)瓶颠,負(fù)責(zé)維護(hù)Bean實(shí)例的生命周期行為拟赊;如果一個(gè)Bean被設(shè)置成prototype作用域,程序每次請(qǐng)求該id的Bean粹淋,Spring都會(huì)新建一個(gè)Bean實(shí)例吸祟,然后返回給程序。在這種情況下桃移,Spring容器僅僅使用new 關(guān)鍵字創(chuàng)建Bean實(shí)例屋匕,一旦創(chuàng)建成功,容器不在跟蹤實(shí)例借杰,也不會(huì)維護(hù)Bean實(shí)例的狀態(tài)过吻。
如果不指定Bean的作用域,Spring默認(rèn)使用singleton作用域蔗衡。Java在創(chuàng)建Java實(shí)例時(shí)纤虽,需要進(jìn)行內(nèi)存申請(qǐng);銷毀實(shí)例時(shí)绞惦,需要完成垃圾回收逼纸,這些工作都會(huì)導(dǎo)致系統(tǒng)開(kāi)銷的增加。因此济蝉,prototype作用域Bean的創(chuàng)建杰刽、銷毀代價(jià)比較大呻纹。而singleton作用域的Bean實(shí)例一旦創(chuàng)建成功,可以重復(fù)使用专缠。因此,除非必要淑仆,否則盡量避免將Bean被設(shè)置成prototype作用域涝婉。
bean元素生命周期
1、通過(guò)構(gòu)造器或者工廠方法創(chuàng)建bean實(shí)例
2蔗怠、為bean的屬性值設(shè)置值和對(duì)其他bean的引用
3墩弯、調(diào)用bean的初始化方法
4、使用bean對(duì)象
經(jīng)過(guò)如上對(duì)Bean作用域的介紹渔工,接下來(lái)將在Bean作用域的基礎(chǔ)上講解Bean的生命周期。
Spring容器可以管理singleton作用域下Bean的生命周期桥温,在此作用域下引矩,Spring能夠精確地知道Bean何時(shí)被創(chuàng)建,何時(shí)初始化完成侵浸,以及何時(shí)被銷毀旺韭。而對(duì)于prototype作用域的Bean,Spring只負(fù)責(zé)創(chuàng)建掏觉,當(dāng)容器創(chuàng)建了Bean的實(shí)例后区端,Bean的實(shí)例就交給了客戶端的代碼管理,Spring容器將不再跟蹤其生命周期澳腹,并且不會(huì)管理那些被配置成prototype作用域的Bean的生命周期织盼。Spring中Bean的生命周期的執(zhí)行是一個(gè)很復(fù)雜的過(guò)程,讀者可以利用Spring提供的方法來(lái)定制Bean的創(chuàng)建過(guò)程酱塔。Spring容器在保證一個(gè)bean實(shí)例能夠使用之前會(huì)做很多工作:
7沥邻、使用注解代替xml配置
(1)導(dǎo)包
(2)導(dǎo)入新的約束
(3)在spring配置文件applicationConfig.xml中開(kāi)啟使用注解代理配置文件
(4)在類中使用注解完成配置
8、spring與junit整合測(cè)試
@RunWith(SpringJUnit4ClassRunner.class)注解功能時(shí)幫助我們創(chuàng)建容器
@ContextConfiguration("classpath:applicationContext.xml")指定創(chuàng)建容器時(shí)使用的配置文件
容器創(chuàng)建好之后迁沫,從容器中取對(duì)象的方式如下:
作用:方便程序的測(cè)試
spring對(duì)junit4的支持芦瘾,可以通過(guò)注解方便的測(cè)試spring程序