JavaEE企業(yè)級項(xiàng)目開發(fā)(第3版)課件 微課4-3:依賴注入的3種形式_第1頁
JavaEE企業(yè)級項(xiàng)目開發(fā)(第3版)課件 微課4-3:依賴注入的3種形式_第2頁
JavaEE企業(yè)級項(xiàng)目開發(fā)(第3版)課件 微課4-3:依賴注入的3種形式_第3頁
JavaEE企業(yè)級項(xiàng)目開發(fā)(第3版)課件 微課4-3:依賴注入的3種形式_第4頁
JavaEE企業(yè)級項(xiàng)目開發(fā)(第3版)課件 微課4-3:依賴注入的3種形式_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

主講人:蔣衛(wèi)祥延遲符依賴注入的3種形式Spring入門與IoC依賴注入延遲符

DI的全稱是DependencyInjection,中文稱之為依賴注入。它與控制反轉(zhuǎn)(IoC)的含義相同,只不過這兩個(gè)稱呼是從兩個(gè)角度描述的同一個(gè)概念。

在使用Spring框架之后,對象的實(shí)例不再由調(diào)用者來創(chuàng)建,而是由Spring容器來創(chuàng)建,Spring容器會負(fù)責(zé)控制程序之間的關(guān)系,而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到了Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是控制反轉(zhuǎn)。從Spring容器的角度來看,Spring容器負(fù)責(zé)將被依賴對象賦值給調(diào)用者的成員變量,這相當(dāng)于為調(diào)用者注入了它依賴的實(shí)例,這就是Spring的依賴注入。IoCDI依賴注入實(shí)現(xiàn)方式構(gòu)造方法注入屬性setter方法注入依賴注入常用的實(shí)現(xiàn)方式:接口注入接口注入接口注入:指將客戶類所有注入的方法抽取到一個(gè)接口中,客戶類通過實(shí)現(xiàn)這一接口提供注入的方法。為了采取接口注入的方式,需要聲明一個(gè)額外的接口。接口注入接口方法注入實(shí)例接口:IService.javapublicinterfaceIService{ publicvoidgo();}(2)接口實(shí)現(xiàn)類:Service.javapublicclassServiceimplementsIService{publicvoidgo(){ System.out.println("接口注入測試!");}}(3)注入接口:Injectable.javapublicinterfaceInjectable{ voidinjectService(IServiceservice);}接口注入接口方法注入實(shí)例(4)Consumer類通過繼承Injectable接口注入。publicclassConsumerimplementsInjectable{

privateIServiceservice=null;

publicvoiddoSomething(){

service.go();

} publicvoidinjectService(IServiceservice){ this.service=service; } publicstaticvoidmain(String[]args){ IServiceservice=newService(); Consumerconsumer=newConsumer(); consumer.injectService(service);//接口注入 consumer.doSomething(); } }屬性setter方法注入屬性setter方法注入:指loC

容器使用setter方法注入被依賴的實(shí)例。通過調(diào)用無參構(gòu)造器或無參靜態(tài)工廠方法實(shí)例化Bean后,調(diào)用該Bean的setter方法,即可實(shí)現(xiàn)基于setter方法的依賴注入。使用屬性setter方法實(shí)現(xiàn)依賴注入

在cn.js.ccit.ioc包中,創(chuàng)建接口UserService,在接口中編寫一個(gè)say()方法。1packagecn.js.ccit.ioc;publicinterfaceUserService{ publicvoidsay();}使用屬性setter方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建UserService接口的實(shí)現(xiàn)類UserServiceImpl,在類中聲明userDao屬性,并添加屬性的setter方法。2packagecn.js.ccit.ioc;publicclassUserServiceImplimplementsUserService{privateUserDao

userDao;//屬性setter方法注入publicvoidsetUserDao(UserDao

userDao){this.userDao=userDao;}publicUserDaogetUserDao(){returnuserDao;}publicvoidsay(){userDao.say();System.out.println("UserServicesayhelloWorld!");}}使用屬性setter方法實(shí)現(xiàn)依賴注入在配置文件applicationContext.xml中,創(chuàng)建一個(gè)id為userService的Bean,該Bean用于實(shí)例化UserServiceImpl類的信息,并將userDao的實(shí)例注入到userService中。3<beanid="userDao"class="cn.js.ccit.ioc.UserDaoImpl"/><beanid="userService"class="cn.js.ccit.ioc.UserServiceImpl"><propertyname="userDao"ref="userDao"></property></bean><property>是<bean>元素的子元素,它用于調(diào)用Bean實(shí)例中的setUserDao()方法完成屬性賦值,從而實(shí)現(xiàn)依賴注入。其name屬性表示Bean實(shí)例中的相應(yīng)屬性名,ref屬性用于指定其屬性值。使用屬性setter方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建測試類TestDI,來對程序進(jìn)行測試。4packagecn.js.ccit.ioc;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassTestDI{publicstaticvoidmain(String[]args){//1.初始化spring容器,加載配置文件

ApplicationContext

applicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

//2.通過容器獲取UserService實(shí)例

UserService

userService= (UserService)applicationContext.getBean("userService");

//3.調(diào)用實(shí)例中的say()方法

userService.say();}}使用屬性setter方法實(shí)現(xiàn)依賴注入執(zhí)行程序后,控制臺的輸出結(jié)果如圖所示。5構(gòu)造方法注入構(gòu)造方法注入:指loC容器使用構(gòu)造方法注入被依賴的實(shí)例。基于構(gòu)造方法的依賴注入通過調(diào)用帶參數(shù)的構(gòu)造方法來實(shí)現(xiàn),每個(gè)參數(shù)代表著一個(gè)依賴。使用構(gòu)造方法實(shí)現(xiàn)依賴注入

在cn.js.ccit.ioc包中,創(chuàng)建接口UserService,在接口中編寫一個(gè)say()方法。1packagecn.js.ccit.ioc;publicinterfaceUserService{ publicvoidsay();}使用構(gòu)造方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建UserService接口的實(shí)現(xiàn)類UserServiceImpl,在類中聲明userDao屬性,并實(shí)現(xiàn)含userDao參數(shù)的構(gòu)造方法。2packagecn.js.ccit.ioc;publicclassUserServiceImplimplementsUserService{privateUserDaouserDao;//構(gòu)造方法注入publicUserServiceImpl(UserDaouserDao){ this.userDao=userDao;}@Overridepublicvoidsay(){userDao.say();System.out.println("UserServicesayhelloWorld!");}}使用構(gòu)造方法實(shí)現(xiàn)依賴注入在配置文件applicationContext.xml中,創(chuàng)建一個(gè)id為userService的Bean,該Bean用于實(shí)例化UserServiceImpl類的信息,并將userDao的實(shí)例注入到userService中。3<beanid="userDao"class="cn.js.ccit.ioc.UserDaoImpl"/><beanid="userService"class="cn.js.ccit.ioc.UserServiceImpl">

<!--構(gòu)造函數(shù)方式注入的時(shí)候必須配置構(gòu)造函數(shù)的參數(shù)--> <constructor-argname="userDao"ref="userDao"></constructor-arg></bean><constructor-arg>是<bean>元素的子元素,通過傳入構(gòu)造參數(shù)進(jìn)行實(shí)例化。其name屬性表示構(gòu)造參數(shù)名稱,ref屬性用于指定其參數(shù)值。使用構(gòu)造方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建測試類TestDI,來對程序進(jìn)行測試。4packagecn.js.ccit.ioc;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassTestDI{publicstaticvoidmain(String[]args){//1.初始化spring容器,加載配置文件ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

//2.通過容器獲取UserService實(shí)例UserServiceuserService= (UserService)applicationContext.getBean("userService");

//3.調(diào)用實(shí)例中的say()方法userService.say();}}使用構(gòu)造方法實(shí)現(xiàn)依賴注入執(zhí)行程序后,控制臺的輸出結(jié)果如圖所示。5使用構(gòu)造方法實(shí)現(xiàn)依賴注入(1)index屬性在參數(shù)的順序指定中,第一個(gè)參數(shù)的索引值是0,第二個(gè)參數(shù)的索引是1,依次類推。applicationContext.xml可以改寫為:<beanid="user"class="com.my.ccit.User">

<constructor-argindex="0">

<value>admin</value>

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論