版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SpringIOC簡(jiǎn)介
目標(biāo)
*loC簡(jiǎn)介
*loC實(shí)現(xiàn)方式
xBeanFactory簡(jiǎn)介
xBean的生命周期
2
控制反轉(zhuǎn)
X控制反轉(zhuǎn)
就是由容器控制程序之間的(依賴)關(guān)系,而非
傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控
X依賴注入
+組件之間的依賴關(guān)系由容器在運(yùn)行期決定
..+由容器動(dòng)態(tài)的將某種依賴關(guān)系注入到組件之中
xloC也稱為好萊塢原則(Hollywood
Principle):“Don'tcallus,we"IIcallyou”
即,如果大腕明星想演節(jié)目,不用自己去找好萊
塢公司,而是由好萊塢公司主動(dòng)去找他們
3
控制反轉(zhuǎn)
X依賴注入機(jī)制減輕了組件之間的依賴關(guān)系
提高組件的可移植性
X提高組件的可移植性重用性
控制反轉(zhuǎn)
Girlwantaboyfriend
GirlBoy
三種方式:
1青梅竹馬;2親友介紹;3父母包辦
5
控制反轉(zhuǎn)
青梅竹馬
publicclassGirl{
voidkiss(){
Boyboy=newBoy();
)
)
6
控制反轉(zhuǎn)
親友介紹
GirlBoyFactoryBoy
publicclassGirl{
voidkiss(){
Boyboy=BoyFactory.createBoy();
控制反轉(zhuǎn)
父母包辦
Iwant
someonetoHereis
aBoy,
Girlie
publicclassGirl{publicclassGirl{
publicGirl(Boyboy)privateBoyboy;
{)publicvoidsetBoy(Boyboy)
voidkiss(Boyboy){
//kissboythis.boy=boy;
boy.kiss();)
8
BEAN的定義
x<beanid="userTable"
class="com.xfaccp.module.dao.UserTableDAO">
x<propertyname="name">
<value>ACCP</value>
x</property>
x</bean>
這是一個(gè)最簡(jiǎn)單的Bean定義。它類似于調(diào)用了語(yǔ)句:
UserTabieDAOuserDao=newUserTabieDAO(),但是它
在實(shí)例化UserTableDAO時(shí)候?qū)CCP這個(gè)字符串賦給了
UserTabieDAO中的name屬性
9
B魂(的定義
xid="beanld"(1)
xname="beanName"(2)
xclass="beanClass"(3)
xparent="parentBean"(4)
xabstract="true|false"(5)
xsingleton="true|false"(6)
xlazy-init="true|false|default"(7)
xautowire="no|byName|byType|constructor|autodetect|default(8)
dependency-check="none|objects|simple|all|default"(9)
xdepends-on="dependsOnBean"(10)
xinit-method="method"(11)
destroy-method="method"(12)
factory-method="method"(13)
factory-bean="bean">(14)
</bean>
10
BEAN的定義
(1)、id:Bean的唯一標(biāo)識(shí)名。它必須是合法的XMLID,在整個(gè)XML
文檔中唯一。
x(2)、name:用來(lái)為id創(chuàng)建一個(gè)或多個(gè)別名。它可以是任意的字母符
合。多個(gè)別名之間用逗號(hào)或空格分開。
(3)、class:用來(lái)定義類的全限定名(包名十類名)。只有子類
Bean不用定義該屬性。
x(4)、parent:子類Bean定義它所引用它的父類Bean。這時(shí)前面的
class屬性失效。子類Bean會(huì)繼承父類Bean的所有屬性,子類Bean也
可以覆蓋父類Bean的屬性。注意:子類Bean和父類Bean是同一個(gè)
Java類。
x(5)、abstract(默認(rèn)為"false”):用來(lái)定義Bean是否為抽象
Beano它表示這個(gè)Bean將不會(huì)被實(shí)例化,一般用于父類Bean,因?yàn)?/p>
父類Bean主要是供子類Bean繼承使用。
(6)、singleton(默認(rèn)為“true"):定義Bean是否是Singleton(單
例)o如果設(shè)為“true”,則在BeanFactory作用范圍內(nèi),只維護(hù)此
Bean的一個(gè)實(shí)例。如果設(shè)為“flase”,Bean將是Prototype(原型)
狀態(tài),BeanFactory將為每次Bean請(qǐng)求創(chuàng)建一個(gè)新的Bean實(shí)例。
11
BEAN的定義
x(7)>lazy-initC默認(rèn)為“default"):用來(lái)定義這個(gè)
Bean是否實(shí)現(xiàn)懶初始化。如果為“true”,它將在
BeanFactory啟動(dòng)時(shí)初始化所有的SingletonBeano反之,
如果為“false”,它只在Bean請(qǐng)求時(shí)才開始創(chuàng)建Singleton
Beano
(8)、autowire(自動(dòng)裝配,默認(rèn)為“default”):它定
義了Bean的自動(dòng)裝載方式。
1、“no”:不使用自動(dòng)裝配功能。
2、“byName":通過Bean的屬性名實(shí)現(xiàn)自動(dòng)裝配。
3^“byType":通過Bean的類型實(shí)現(xiàn)自動(dòng)裝配。
4、"constructor":類似于byType,但它是用于構(gòu)造函數(shù)的參數(shù)的
自動(dòng)組裝。
5、“autodetect":通過Bean類的反省機(jī)制(introspection)決定
是使用“constructor”還是使用“byType”。
12
“『MF尸*睢nflacy-check(依賴檢查,默認(rèn)為“default”):它用來(lái)
確葆Bean組件通過JavaBean描述的所以依賴關(guān)系都得到滿足。在與自
動(dòng)裝配功能一起使用時(shí),它特別有用。
none:不進(jìn)行依賴檢查。
objects:只做對(duì)象間依賴的檢查。
simple:只做原始類型和String類型依賴的檢查
+all:對(duì)所有類型的依賴進(jìn)行檢查。它包括了前面的objects和simple。
x(10)、depends-on(依賴對(duì)象):這個(gè)Bean在初始化時(shí)依賴的對(duì)象,
這個(gè)對(duì)象會(huì)卷這個(gè)Bean初始化之前創(chuàng)建。
(11)、init-method:用來(lái)定義Bean的初始化方法,它會(huì)在Bean組裝之
后調(diào)用。它必須是一個(gè)無(wú)參數(shù)的方法。
(12)、destroy-method:用來(lái)定義Bean的銷毀方法,它在
BeanFactory關(guān)前時(shí)調(diào)用。同樣,它也必須是一個(gè)無(wú)參數(shù)的方法。它只
能應(yīng)用于singletonBeano
(13)、factory-method:定義創(chuàng)建該Bean對(duì)象的工廠方法。它用于下
面的“factory-bean”,表示這個(gè)Bean是通過工廠方法創(chuàng)建。此時(shí),
“class”屬性失效。
(14)、factory-bean:定義創(chuàng)建該Bean對(duì)象的工廠類。如果使用了
“factory-bean貝”"class”屬,性失效。
13
IOC實(shí)現(xiàn)方式T______________________________
X接口注入
+在一個(gè)接口中定義需要注入的信息,并通過接口
完成注入
首先要定義一個(gè)接口
組件通過這個(gè)接口進(jìn)行注入
14
I。濟(jì)方式-L
publicinterfaceInjectUserDao{
publicvoidsetUserDao(UserDaouserDao);
)
x實(shí)現(xiàn)類
publicclassUserRegisterimplements
lnjectUserDao{
privateUserDaouserDao=null;//該對(duì)象實(shí)例由
容器注入
publicvoidsetUserDao(UserDaouserDao){
this.userDao=userDao;
+}
//UserRegister的其它業(yè)務(wù)方法
)
15
IOC實(shí)現(xiàn)方式T______________________________
x配置InjectUserDao接口和UserDao的實(shí)現(xiàn)類
<component>
<scope>request</scope>
<class>com.dev.simple.MeinoryUserDao</class>
<enabler>com.dev.simplednjectUserDao</enabler
>
</component>
x當(dāng)loC容器判斷出UserRegister組件實(shí)現(xiàn)了
InjectUserDao接口時(shí))它就將MemoryUserDao
實(shí)例注入到UserRegister組件中
16
IOC實(shí)現(xiàn)方式=2_______________
X設(shè)值方法注入
通過類的setter方法完成依賴關(guān)系的設(shè)置
基于設(shè)置模式的依賴注入機(jī)制更加直觀、也更加自然
publicclassGirl{
privateKissablekissable;
publicvoidsetKissable(Kissablekissable){
this.kissable=kissable;
)
publicvoidkissYourKissable(){
kissable.kiss();
)
)
17
IOC實(shí)現(xiàn)方式=2_____________
<beans>
<beanid="boy”
class="coiTkxfaccp.bean.Boy”/>
<beanjd="girl"
class=acom.xfaccp.bean.Girl">
<propertyname=akissable">
<refbean=aboy"/>
</property>
</bean>
</beans>
如果是參數(shù)是集合類那該怎么辦?像List,Map
18
LIST的初始值的設(shè)置
xList的初始值的設(shè)置
<propertyname="list”,
x<list>
x<value>Hello</value>
x<value>Hello2</value>
x</list>
</property>
19
MAP的初始值的設(shè)置
xMap的初始值的設(shè)置
+<propertyname="map>>
x<map>
<entrykey="keyl">
x<value>valuel</value>
x</entry>
x<entrykey="key2">
x<value>value2</value>
x</entry>
x</map>
</property>
20
IOC實(shí)現(xiàn)方式-3
x構(gòu)造子注入
通過構(gòu)造函數(shù)完成依賴關(guān)系的設(shè)定
publicclassGirl{
privateKissablekissable;
publicGirl(Kissablekissable){
this.kissable=kissable;
)
publicvoidkissYourKissable(){
kissable.kiss();
)
)
IOC實(shí)現(xiàn)方式一3
x<beans>
<beanid=""class="Boyn/>
<beanid="girl"class=aGirl">
<constructor-arg>
<refbean=""/>
</constructor-arg>
</bean>
</beans>
,如果構(gòu)造函數(shù)有多個(gè)參數(shù)?
22
三種IOC比較
X接口注入模式因?yàn)闅v史較為悠久,在很多容器
中都已經(jīng)得到應(yīng)用。但由于其在靈活性、易用
性上不如其他兩種注入模式,因而在IOC的專
題世界內(nèi)并不被看好
23
三種IOC比較-TYPE2
*對(duì)于習(xí)慣了傳統(tǒng)JavaBean開發(fā)的程序員而言,通
過setter方法設(shè)定依賴關(guān)系顯得更加直觀,更加
自然。
x如果依賴關(guān)系(或繼承關(guān)系)較為復(fù)雜,那么
Type3模式的構(gòu)造函數(shù)也會(huì)相當(dāng)龐大(我們需要
在構(gòu)造函數(shù)中設(shè)定所有依賴關(guān)系),此時(shí)Type2
模式往往更為簡(jiǎn)潔。
對(duì)于某些第三方類庫(kù)而言,可能要求我們的組件
必須提供一個(gè)默認(rèn)的構(gòu)造函數(shù)(如Struts中的
Action),此時(shí)Type3類型的依賴注入機(jī)制就體現(xiàn)
出其局限性,難以完成我們期望的功能。
24
三種IOC比較二TYPE3
X“準(zhǔn)構(gòu)造期即創(chuàng)建一個(gè)完整、合法的對(duì)象”,對(duì)于這條Java
設(shè)計(jì)原則,Type3無(wú)疑是最好的響應(yīng)者。
x避免了繁瑣的setter方法的編寫,所有依賴關(guān)系均在構(gòu)造函
數(shù)中設(shè)定,依賴關(guān)系集中呈現(xiàn),更加易讀。
x由于沒有setter方法,依賴關(guān)系在構(gòu)造時(shí)由容器一次性設(shè)定,
因此組件在被創(chuàng)建之后即處于相對(duì)“不變”的穩(wěn)定狀態(tài),無(wú)
需擔(dān)心上層代相在調(diào)用過程中擾行setter方法對(duì)組件依賴關(guān)
系產(chǎn)生破壞,持別是對(duì)于Singleton模式的組件而言,這可能
對(duì)整個(gè)系統(tǒng)產(chǎn)星重大的影響。
二同樣,由于關(guān)聯(lián)關(guān)系僅在構(gòu)造函數(shù)中表達(dá),只有組件創(chuàng)建者
需要關(guān)心組件內(nèi)部的依賴關(guān)系。對(duì)調(diào)用者而言,組件中的依
賴關(guān)系處于黑盒之中。對(duì)上層屏蔽不必要的信息,也為系統(tǒng)
的層次清晰性提供了保證。
通過構(gòu)造子注入,意味著我們可以在構(gòu)造函數(shù)中決定依賴關(guān)
系的注入順序,對(duì)于一個(gè)大量?jī)z賴外部服務(wù)的組件而言,依
賴關(guān)系的獲得順序可能非常重要,比如某個(gè)依賴關(guān)系注入的
先決條件是組件的UserDao及相關(guān)資源已經(jīng)被設(shè)定。
25
BEANFACTORY簡(jiǎn)介-1
xBeanFactory是Spring的“心臟”。它就是SpringloC容器的真
面目
xSpring使用BeanFactory來(lái)實(shí)例化、配置和管理Bean
x我們最常用的BeanFactory實(shí)現(xiàn)是
org.springframework.beans.factory.xml.XmlBeanFactory,它從
XML文件中讀取Bean的定義信息
BeanFactoryfactory=newXmlBeanFactory(new
ClassPathResourceC'applicationContext.xml"));
TestActionaction=(TestAction)factory.getBean("testAction");
26
BEANFACTORY簡(jiǎn)介-2
xbooleancontainsBean(Stringname)
+根據(jù)名字來(lái)判斷BeanFactory中是否有某個(gè)Bean
xbooleanisSingleton(Stringname)
判斷某個(gè)bean是否是一個(gè)單例
xObjectgetBean(Stringname)
根據(jù)Bean的名字從Factory中找至]某個(gè)Bean的實(shí)例
27
EANi
1DefaultconstructorDefinition
2
3autowiring
4dependencycheck
5setXXX()methods
6afterPropertiesSet()
7init-method
setBeanFactory()
8.destroy()
9.destroy-method
28
BEAN的生命周期
xBean的定義
<beanid="loginTable"
class="com.xfaccp.module.dao.LoginTableDAO"></b
ean>
xBean工廠使用Bean的構(gòu)造函數(shù)創(chuàng)建Bean對(duì)象
之后,緊接著它會(huì)做一件非常重要的工作一一
Bean的初始化。它會(huì)根據(jù)配置信息設(shè)置Bean
的屬性和依賴好象,我行相應(yīng)的初始化方法
x自動(dòng)裝配
依賴檢查
調(diào)用相應(yīng)的set***方法,像給定的class中注入
依賴的屬性
29
BEAN的生命周期
xafterPropertiesSet()
xinit-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 主播公司財(cái)務(wù)制度
- 加拿大財(cái)務(wù)制度
- 企業(yè)中嚴(yán)格遵守財(cái)務(wù)制度
- 會(huì)計(jì)財(cái)務(wù)制度會(huì)計(jì)制度
- 農(nóng)村緊急醫(yī)療救治制度
- 關(guān)于公司人事群里發(fā)布公司制度
- 公司重整制度
- 公司宴會(huì)政策制度
- 養(yǎng)老院老人請(qǐng)假制度
- 洛川縣項(xiàng)目管理制度(3篇)
- 高校區(qū)域技術(shù)轉(zhuǎn)移轉(zhuǎn)化中心(福建)光電顯示、海洋氫能分中心主任招聘2人備考題庫(kù)及答案詳解(考點(diǎn)梳理)
- 航空安保審計(jì)培訓(xùn)課件
- 2026四川成都錦江投資發(fā)展集團(tuán)有限責(zé)任公司招聘18人備考題庫(kù)有答案詳解
- 2026元旦主題班會(huì):馬年猜猜樂馬年成語(yǔ)教學(xué)課件
- 云南省楚雄州2023-2024學(xué)年上學(xué)期期末教育學(xué)業(yè)質(zhì)量監(jiān)測(cè)九年級(jí)歷史試卷(含答案)
- 2023年湖北煙草筆試試題
- 凝血功能檢測(cè)方法與臨床意義
- 人教版五年級(jí)數(shù)學(xué)用方程解決問題
- 架桿租賃合同
- 哈工大歷年電機(jī)學(xué)試卷及答案詳解
- GB/T 16886.1-2022醫(yī)療器械生物學(xué)評(píng)價(jià)第1部分:風(fēng)險(xiǎn)管理過程中的評(píng)價(jià)與試驗(yàn)
評(píng)論
0/150
提交評(píng)論