




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公務(wù)員遴選考試公共基礎(chǔ)知識必考題庫170題及答案(四)
- 2024-2025學(xué)年新教材高中生物 第二章 遺傳信息的復(fù)制與表達(dá) 第二節(jié) 轉(zhuǎn)錄教學(xué)實(shí)錄 北師大版必修2
- 7《課間十分鐘》教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治一年級上冊統(tǒng)編版
- 項(xiàng)目背景介紹
- 現(xiàn)代農(nóng)業(yè)智能化管理方案
- 14《圓明園的毀滅》第二課時(shí)教學(xué)設(shè)計(jì)-2024-2025學(xué)年五年級上冊語文統(tǒng)編版
- 3 學(xué)會反思 第一課時(shí)教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 4《這是誰的葉》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年一年級上冊科學(xué)教科版
- 5制作塔臺模型(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級下冊科學(xué)教科版
- 早期腸內(nèi)營養(yǎng)耐受性分級護(hù)理在ICU膿毒血癥患者中的應(yīng)用效果
- GB/T 23265-2009水泥混凝土和砂漿用短切玄武巖纖維
- GB/T 18849-2011機(jī)動(dòng)工業(yè)車輛制動(dòng)器性能和零件強(qiáng)度
- 《中華人民共和國憲法》知識測試題
- DB31-T 1338-2021 船舶供應(yīng)服務(wù)物料產(chǎn)品分類與編碼要求
- 常用法定計(jì)量單位及使用規(guī)則
- 鐵路工程質(zhì)量管理與質(zhì)量驗(yàn)收標(biāo)準(zhǔn)培訓(xùn)課件
- 技工學(xué)校學(xué)生學(xué)籍管理制度規(guī)定
- 合同的訂立程序
- 謝孟媛初級語法IIII匯編可直接編輯
- 消防氣體滅火技術(shù)交底記錄
- 【高等數(shù)學(xué)練習(xí)題】湖北汽車工業(yè)學(xué)院專升本自考真題匯總(附答案解析)
評論
0/150
提交評論