版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
SpringIOC簡介
目標(biāo)
*loC簡介
*loC實現(xiàn)方式
xBeanFactory簡介
xBean的生命周期
2
控制反轉(zhuǎn)
X控制反轉(zhuǎn)
就是由容器控制程序之間的(依賴)關(guān)系,而非
傳統(tǒng)實現(xiàn)中,由程序代碼直接操控
X依賴注入
+組件之間的依賴關(guān)系由容器在運行期決定
..+由容器動態(tài)的將某種依賴關(guān)系注入到組件之中
xloC也稱為好萊塢原則(Hollywood
Principle):“Don'tcallus,we"IIcallyou”
即,如果大腕明星想演節(jié)目,不用自己去找好萊
塢公司,而是由好萊塢公司主動去找他們
3
控制反轉(zhuǎn)
X依賴注入機制減輕了組件之間的依賴關(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>
這是一個最簡單的Bean定義。它類似于調(diào)用了語句:
UserTabieDAOuserDao=newUserTabieDAO(),但是它
在實例化UserTableDAO時候?qū)CCP這個字符串賦給了
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)識名。它必須是合法的XMLID,在整個XML
文檔中唯一。
x(2)、name:用來為id創(chuàng)建一個或多個別名。它可以是任意的字母符
合。多個別名之間用逗號或空格分開。
(3)、class:用來定義類的全限定名(包名十類名)。只有子類
Bean不用定義該屬性。
x(4)、parent:子類Bean定義它所引用它的父類Bean。這時前面的
class屬性失效。子類Bean會繼承父類Bean的所有屬性,子類Bean也
可以覆蓋父類Bean的屬性。注意:子類Bean和父類Bean是同一個
Java類。
x(5)、abstract(默認為"false”):用來定義Bean是否為抽象
Beano它表示這個Bean將不會被實例化,一般用于父類Bean,因為
父類Bean主要是供子類Bean繼承使用。
(6)、singleton(默認為“true"):定義Bean是否是Singleton(單
例)o如果設(shè)為“true”,則在BeanFactory作用范圍內(nèi),只維護此
Bean的一個實例。如果設(shè)為“flase”,Bean將是Prototype(原型)
狀態(tài),BeanFactory將為每次Bean請求創(chuàng)建一個新的Bean實例。
11
BEAN的定義
x(7)>lazy-initC默認為“default"):用來定義這個
Bean是否實現(xiàn)懶初始化。如果為“true”,它將在
BeanFactory啟動時初始化所有的SingletonBeano反之,
如果為“false”,它只在Bean請求時才開始創(chuàng)建Singleton
Beano
(8)、autowire(自動裝配,默認為“default”):它定
義了Bean的自動裝載方式。
1、“no”:不使用自動裝配功能。
2、“byName":通過Bean的屬性名實現(xiàn)自動裝配。
3^“byType":通過Bean的類型實現(xiàn)自動裝配。
4、"constructor":類似于byType,但它是用于構(gòu)造函數(shù)的參數(shù)的
自動組裝。
5、“autodetect":通過Bean類的反省機制(introspection)決定
是使用“constructor”還是使用“byType”。
12
“『MF尸*睢nflacy-check(依賴檢查,默認為“default”):它用來
確葆Bean組件通過JavaBean描述的所以依賴關(guān)系都得到滿足。在與自
動裝配功能一起使用時,它特別有用。
none:不進行依賴檢查。
objects:只做對象間依賴的檢查。
simple:只做原始類型和String類型依賴的檢查
+all:對所有類型的依賴進行檢查。它包括了前面的objects和simple。
x(10)、depends-on(依賴對象):這個Bean在初始化時依賴的對象,
這個對象會卷這個Bean初始化之前創(chuàng)建。
(11)、init-method:用來定義Bean的初始化方法,它會在Bean組裝之
后調(diào)用。它必須是一個無參數(shù)的方法。
(12)、destroy-method:用來定義Bean的銷毀方法,它在
BeanFactory關(guān)前時調(diào)用。同樣,它也必須是一個無參數(shù)的方法。它只
能應(yīng)用于singletonBeano
(13)、factory-method:定義創(chuàng)建該Bean對象的工廠方法。它用于下
面的“factory-bean”,表示這個Bean是通過工廠方法創(chuàng)建。此時,
“class”屬性失效。
(14)、factory-bean:定義創(chuàng)建該Bean對象的工廠類。如果使用了
“factory-bean貝”"class”屬,性失效。
13
IOC實現(xiàn)方式T______________________________
X接口注入
+在一個接口中定義需要注入的信息,并通過接口
完成注入
首先要定義一個接口
組件通過這個接口進行注入
14
I。濟方式-L
publicinterfaceInjectUserDao{
publicvoidsetUserDao(UserDaouserDao);
)
x實現(xiàn)類
publicclassUserRegisterimplements
lnjectUserDao{
privateUserDaouserDao=null;//該對象實例由
容器注入
publicvoidsetUserDao(UserDaouserDao){
this.userDao=userDao;
+}
//UserRegister的其它業(yè)務(wù)方法
)
15
IOC實現(xiàn)方式T______________________________
x配置InjectUserDao接口和UserDao的實現(xiàn)類
<component>
<scope>request</scope>
<class>com.dev.simple.MeinoryUserDao</class>
<enabler>com.dev.simplednjectUserDao</enabler
>
</component>
x當(dāng)loC容器判斷出UserRegister組件實現(xiàn)了
InjectUserDao接口時)它就將MemoryUserDao
實例注入到UserRegister組件中
16
IOC實現(xiàn)方式=2_______________
X設(shè)值方法注入
通過類的setter方法完成依賴關(guān)系的設(shè)置
基于設(shè)置模式的依賴注入機制更加直觀、也更加自然
publicclassGirl{
privateKissablekissable;
publicvoidsetKissable(Kissablekissable){
this.kissable=kissable;
)
publicvoidkissYourKissable(){
kissable.kiss();
)
)
17
IOC實現(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實現(xiàn)方式-3
x構(gòu)造子注入
通過構(gòu)造函數(shù)完成依賴關(guān)系的設(shè)定
publicclassGirl{
privateKissablekissable;
publicGirl(Kissablekissable){
this.kissable=kissable;
)
publicvoidkissYourKissable(){
kissable.kiss();
)
)
IOC實現(xiàn)方式一3
x<beans>
<beanid=""class="Boyn/>
<beanid="girl"class=aGirl">
<constructor-arg>
<refbean=""/>
</constructor-arg>
</bean>
</beans>
,如果構(gòu)造函數(shù)有多個參數(shù)?
22
三種IOC比較
X接口注入模式因為歷史較為悠久,在很多容器
中都已經(jīng)得到應(yīng)用。但由于其在靈活性、易用
性上不如其他兩種注入模式,因而在IOC的專
題世界內(nèi)并不被看好
23
三種IOC比較-TYPE2
*對于習(xí)慣了傳統(tǒng)JavaBean開發(fā)的程序員而言,通
過setter方法設(shè)定依賴關(guān)系顯得更加直觀,更加
自然。
x如果依賴關(guān)系(或繼承關(guān)系)較為復(fù)雜,那么
Type3模式的構(gòu)造函數(shù)也會相當(dāng)龐大(我們需要
在構(gòu)造函數(shù)中設(shè)定所有依賴關(guān)系),此時Type2
模式往往更為簡潔。
對于某些第三方類庫而言,可能要求我們的組件
必須提供一個默認的構(gòu)造函數(shù)(如Struts中的
Action),此時Type3類型的依賴注入機制就體現(xiàn)
出其局限性,難以完成我們期望的功能。
24
三種IOC比較二TYPE3
X“準構(gòu)造期即創(chuàng)建一個完整、合法的對象”,對于這條Java
設(shè)計原則,Type3無疑是最好的響應(yīng)者。
x避免了繁瑣的setter方法的編寫,所有依賴關(guān)系均在構(gòu)造函
數(shù)中設(shè)定,依賴關(guān)系集中呈現(xiàn),更加易讀。
x由于沒有setter方法,依賴關(guān)系在構(gòu)造時由容器一次性設(shè)定,
因此組件在被創(chuàng)建之后即處于相對“不變”的穩(wěn)定狀態(tài),無
需擔(dān)心上層代相在調(diào)用過程中擾行setter方法對組件依賴關(guān)
系產(chǎn)生破壞,持別是對于Singleton模式的組件而言,這可能
對整個系統(tǒng)產(chǎn)星重大的影響。
二同樣,由于關(guān)聯(lián)關(guān)系僅在構(gòu)造函數(shù)中表達,只有組件創(chuàng)建者
需要關(guān)心組件內(nèi)部的依賴關(guān)系。對調(diào)用者而言,組件中的依
賴關(guān)系處于黑盒之中。對上層屏蔽不必要的信息,也為系統(tǒng)
的層次清晰性提供了保證。
通過構(gòu)造子注入,意味著我們可以在構(gòu)造函數(shù)中決定依賴關(guān)
系的注入順序,對于一個大量儂賴外部服務(wù)的組件而言,依
賴關(guān)系的獲得順序可能非常重要,比如某個依賴關(guān)系注入的
先決條件是組件的UserDao及相關(guān)資源已經(jīng)被設(shè)定。
25
BEANFACTORY簡介-1
xBeanFactory是Spring的“心臟”。它就是SpringloC容器的真
面目
xSpring使用BeanFactory來實例化、配置和管理Bean
x我們最常用的BeanFactory實現(xiàn)是
org.springframework.beans.factory.xml.XmlBeanFactory,它從
XML文件中讀取Bean的定義信息
BeanFactoryfactory=newXmlBeanFactory(new
ClassPathResourceC'applicationContext.xml"));
TestActionaction=(TestAction)factory.getBean("testAction");
26
BEANFACTORY簡介-2
xbooleancontainsBean(Stringname)
+根據(jù)名字來判斷BeanFactory中是否有某個Bean
xbooleanisSingleton(Stringname)
判斷某個bean是否是一個單例
xObjectgetBean(Stringname)
根據(jù)Bean的名字從Factory中找至]某個Bean的實例
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對象
之后,緊接著它會做一件非常重要的工作一一
Bean的初始化。它會根據(jù)配置信息設(shè)置Bean
的屬性和依賴好象,我行相應(yīng)的初始化方法
x自動裝配
依賴檢查
調(diào)用相應(yīng)的set***方法,像給定的class中注入
依賴的屬性
29
BEAN的生命周期
xafterPropertiesSet()
xinit-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在役鋼筋混凝土渡槽結(jié)構(gòu)安全評估及加固方案研究
- “郁三針”治療卒中后輕中度抑郁的臨床研究
- 含有吡喃酮的手性吲哚衍生物的設(shè)計、合成及抗菌活性研究
- 二零二五年度學(xué)校食堂食品安全管理承包協(xié)議
- 噴霧干燥法生產(chǎn)復(fù)合雜糧麥粉的工藝研究
- 2025年度物業(yè)服務(wù)賠償協(xié)議范本
- 2025年度離婚協(xié)議范本涉及婚姻財產(chǎn)分割及稅務(wù)籌劃建議
- 2025年度企業(yè)轉(zhuǎn)型股東增資擴股協(xié)議書
- 二零二五年度冷鏈配送及食品安全保障合同
- 二零二五年度金融機構(gòu)上門收款業(yè)務(wù)合同范本
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點詳解
- 2024-2025學(xué)年八年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《萬方數(shù)據(jù)資源介紹》課件
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
- 第一章-地震工程學(xué)概論
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- 交通運輸類專業(yè)生涯發(fā)展展示
- 2024年山東省公務(wù)員錄用考試《行測》試題及答案解析
- 神經(jīng)重癥氣管切開患者氣道功能康復(fù)與管理專家共識(2024)解讀
- 元代文學(xué)緒論
評論
0/150
提交評論