(參考內(nèi)容)
Singleton 單例 在Spring IOC 容器僅存在一個(gè)Bean實(shí)例,Bean以單例方式存在,這個(gè)是默認(rèn)值。
prototype 原型 每次從容器調(diào)用bean時(shí),都會(huì)返回一個(gè)新的實(shí)例,也就是每次調(diào)用getBean()時(shí)都會(huì)實(shí)例化一個(gè)新的bean。
request 每次HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Bean,該作用于僅適用于web環(huán)境
session 每個(gè)HTTP Session共享一個(gè)Bean,不同的Session使用不同的Bean,同樣只適用于web環(huán)境。
Global Session 一般作用于Portlet應(yīng)用環(huán)境,只作用于Web環(huán)境。
五種作用域中,其中request、session、global session三種作用域僅適用于web環(huán)境
bean對(duì)象無(wú)外乎是在以下兩個(gè)時(shí)刻進(jìn)行實(shí)例化的:
調(diào)用getBean()方法時(shí)。
Spring容器啟動(dòng)時(shí)。
bean的作用域?yàn)閟ingleton時(shí),bean對(duì)象是在Spring容器啟動(dòng)時(shí)就進(jìn)行創(chuàng)建。
但我們也可以指定bean節(jié)點(diǎn)的lazy-init=“true”來(lái)延遲初始化bean,這時(shí)候,只有第一次獲取bean會(huì)才初始化bean。
如果想對(duì)所有bean都應(yīng)用延遲初始化,可以在根節(jié)點(diǎn)beans設(shè)置default-lazy-init=“true”,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" default-lazy-init="true">
......
</beans>
bean的作用域?yàn)閜rototype時(shí),bean對(duì)象并不會(huì)在Spring容器啟動(dòng)時(shí)就進(jìn)行創(chuàng)建,bean對(duì)象將會(huì)在調(diào)用getBean()方法時(shí)進(jìn)行創(chuàng)建。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" lazy-init="false"
init-method="init" destroy-method="destroy" />
</beans>
將會(huì)在bean初始化和銷(xiāo)毀的時(shí)候,執(zhí)行bean內(nèi)的方法。
試著思考這樣一個(gè)問(wèn)題:bean對(duì)象到底是什么時(shí)候銷(xiāo)毀的呢?答案是:如果沒(méi)有人為地刪除它,默認(rèn)該bean一直在Spring容器中,也就是說(shuō)隨著Spring容器的關(guān)閉,該bean才會(huì)被銷(xiāo)毀。
@Autowired默認(rèn)按類(lèi)型裝配,@Resource默認(rèn)按名稱(chēng)裝配,當(dāng)找不到與名稱(chēng)匹配的bean才會(huì)按類(lèi)型裝配
@Autowired + @Qualifier("...") = @Resource(name="...")
@Autowired注解是按類(lèi)型裝配依賴(lài)對(duì)象,默認(rèn)情況下它要求依賴(lài)對(duì)象必須存在,如果允許null值,可以設(shè)置它的required屬性為false。如:
@Autowired(required=true) @Qualifier("personDaoxxxx") private PersonDao personDao;
required=true代表字段personDao必須要注入值,也即是說(shuō)在Spring容器中根據(jù)類(lèi)型找不到對(duì)應(yīng)的bean,那就會(huì)報(bào)異常;
required=false意味著在Spring容器中根據(jù)類(lèi)型找不到對(duì)應(yīng)的的bean,就會(huì)把該字段設(shè)為null。
依賴(lài)注入——自動(dòng)裝配依賴(lài)對(duì)象
<bean id="..." class="..." autowire="byType"/>
autowire屬性取值如下:
@Resource默認(rèn)按名稱(chēng)裝配
@Resource(name="personDaoBean")
private PersonDao personDao; // 用于字段上
@Resource
public void setPersonDao(PersonDao personDao) { // 用于屬性的setter方法上
this.personDao = personDao;
}
注意:如果沒(méi)有指定name屬性,并且按照默認(rèn)的名稱(chēng)仍然找不到依賴(lài)對(duì)象時(shí), @Resource注解會(huì)回退到按類(lèi)型裝配。但一旦指定了name屬性,就只能按名稱(chēng)裝配了。
@Resource裝配順序
1. 如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常
2. 如果指定了name,則從上下文中查找名稱(chēng)(id)匹配的bean進(jìn)行裝配,找不到則拋出異常
3. 如果指定了type,則從上下文中找到類(lèi)型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常
4. 如果既沒(méi)有指定name,又沒(méi)有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒(méi)有匹配,則回退為一個(gè)原始類(lèi)型進(jìn)行匹配,如果匹配則自動(dòng)裝配;
舉例如下:
@Resource
private PersonDao personDao;
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean> 可以
<bean id="personDaoxxxx" class="cn.itcast.dao.impl.PersonDaoBean"></bean> 可以
@Resource(name="personDaoxxxx")
private PersonDao personDao;
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean> 不可以
<bean id="personDaoxxxx" class="cn.itcast.dao.impl.PersonDaoBean"></bean> 可以
網(wǎng)站標(biāo)題:springbean-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article40/jsiho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容