Spring IOC簡介教學(xué)課件_第1頁
Spring IOC簡介教學(xué)課件_第2頁
Spring IOC簡介教學(xué)課件_第3頁
Spring IOC簡介教學(xué)課件_第4頁
Spring IOC簡介教學(xué)課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論