課件課后練習(xí)代碼-經(jīng)典案例_第1頁(yè)
課件課后練習(xí)代碼-經(jīng)典案例_第2頁(yè)
課件課后練習(xí)代碼-經(jīng)典案例_第3頁(yè)
課件課后練習(xí)代碼-經(jīng)典案例_第4頁(yè)
課件課后練習(xí)代碼-經(jīng)典案例_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JavaSpringSpring的基本使Spring容器對(duì)Bean組件的DI問(wèn)如何構(gòu)建Spring工程和Spring容器的初始化方項(xiàng)目結(jié)構(gòu)圖,如圖-1所示圖-新建項(xiàng)目拷貝Jar包到項(xiàng)目下(共2個(gè)spring.jar是的Jar包; 包還需要記錄日志 mons-logging.jar包的支持圖-修改applicationContext.xml,將各種組件(Bean)納入到Spring的管理中<?xmlversion="1.0"encoding="UTF-""""""新建FeeDAO接口,模擬向Fee表添加和更新數(shù)據(jù)publicinterfaceFeeDAOpublicvoidpublicvoid}新建JdbcFeeDAO,模擬實(shí)現(xiàn)FeeDAO接口

packagepublicclassJdbcFeeDAOimplementsFeeDAO{publicJdbcFeeDAO(){System.out.println("------創(chuàng)建 }publicvoid System.out.println("采用JDBC方式將資費(fèi)信息寫(xiě)入表 publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息更新表 修改applicationContext.xml,實(shí)例化JdbcFeeDAOspring<?xmlversion="1.0"encoding="UTF-""""""<beanid="feeDAO" 新建測(cè)試類Test1類,使用ClassPathXmlApplicationContext初始化Spring容器,并獲feeDAOpackageimportimportorg.springframework.context.support.ClassPathXmlApplicationContext;importtarena.dao.FeeDAO;publicclassTest1publicstaticvoidmain(String[]args)Stringconf"applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=//使用}}Spring通過(guò)BeanFactory管理和配置beanSpring里,任何的java對(duì)象、java組件都被當(dāng)成BeanFactory創(chuàng)建并負(fù)責(zé)管理Springbean的上下文的生命周期。并建立對(duì)象之間的依賴性,org.springframework.beans.factory.xml.XmlBeanFactory是BeanFactory實(shí)現(xiàn)類,在時(shí),必須提供Spring容器管理bean的詳細(xì)配置信息,相應(yīng)的XML文件作為參運(yùn)行Test1類,控制臺(tái)輸出結(jié)果如------創(chuàng)建FeeDAO采用JDBC方式將資費(fèi)信息更新從控制的輸出結(jié)果可以看出,實(shí)例化對(duì)象的時(shí)候調(diào)用了FeeDAO的構(gòu)造方法實(shí)FeeDAO接口代碼如publicinterfaceFeeDAOpublicvoidpublicvoid}隱JdbcFeeDAO類代碼如下packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicSystem.out.println("------創(chuàng)建 }publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息寫(xiě)入}publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息更新}}隱applicationContext.xml代碼如下<?xml<beansencoding="UTF-""""""<beanid="feeDAO"packageimportimportorg.springframework.context.support.ClassPathXmlApplicationContext;importtarena.dao.FeeDAO;publicclassTest1publicstaticvoidmain(String[]args)Stringconf"applicationContext.xml";ApplicationContextac=new//通過(guò)spring容器獲取定義的Bean對(duì)FeeDAOfeeDao=}}隱擴(kuò)問(wèn)Bean對(duì)象的創(chuàng)建時(shí)機(jī),Bean對(duì)象的創(chuàng)建模式以及Bean對(duì)象初始化和銷毀方使用spring01工程Bean對(duì)象的創(chuàng)建添加Junit的jar包。點(diǎn)中工程spring01右鍵—Properties--JavaBuildPath--Libraries,如點(diǎn)擊AddLibrary,如圖-4所示

圖-選擇Junit,如圖-5所

圖-點(diǎn)擊Next,如圖-6所

圖-選擇JUnit4,如圖-7所示

圖-圖-點(diǎn)擊Finish,在工程加入了Junit4的就jar包,如圖-8圖-新建Test2類,創(chuàng)建測(cè)試方法test1,創(chuàng)建Spring容器實(shí)例packageimportimportimportimportpublicclassTest2//測(cè)試對(duì)象創(chuàng)建時(shí)publicvoidStringconf="applicationContext.xml";ApplicationContextac=new}}點(diǎn)開(kāi)Test2類,選中test1方--右鍵--RunAs--JunitTest,這樣就可以運(yùn)行test1方法}運(yùn)行結(jié)果,控制臺(tái)輸出結(jié)果如圖-10所示

圖-圖-控制臺(tái)打印結(jié)果顯示,默認(rèn)情況下FeeDAO在Spring容器被創(chuàng)建時(shí)就會(huì)被創(chuàng)建。通過(guò)修改配置文件屬性參數(shù),可以改變Spring容器創(chuàng)建對(duì)象的時(shí)applicationContext.xml<beanid="feeDAO"class="tarena.dao.JdbcFeeDAO"lazy-運(yùn)行test1方圖-測(cè)試:當(dāng)MyBean對(duì)象被調(diào)用時(shí),MyBean修改test1方//測(cè)試對(duì)象創(chuàng)建時(shí)publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=}運(yùn)行test1方法圖-Bean對(duì)象的創(chuàng)建修改Test2類,添加test2方法//測(cè)試scope屬publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao1=FeeDAOfeeDao2=(FeeDAO)}運(yùn)行test2方法,控制臺(tái)輸出結(jié)果如圖-13所示圖-使用單例模式有風(fēng)險(xiǎn),風(fēng)險(xiǎn)在于多線程并發(fā)時(shí)會(huì)有一些狀況修改applicationContext.xml,設(shè)置創(chuàng)建bean的模式為原型模式(prototype)即可以<beanid="feeDAO"class="tarena.dao.JdbcFeeDAO"lazy-init="true"scope屬性的取值介

圖-在web(僅限于web項(xiàng)目)環(huán)境中,還可以設(shè)置所創(chuàng)建的bean對(duì)象的生命周期和requestsessiona.request表示bean對(duì)象生命周期和request生命周期相b.session表示bean對(duì)象生命周期和session生命周期相c.globalsession當(dāng)于applicationd.singleton單例模式totype原型模Bean對(duì)象的初始化和銷init-method屬性用于指定初始化方 packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicvoidSystem.out.println("------進(jìn)行init初始 publicvoidSystem.out.println("------銷毀 publicSystem.out.println("------創(chuàng)建 publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息寫(xiě)入 publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息更新 修改applicationContext.xml,希望在bean對(duì)象創(chuàng)建后自動(dòng)調(diào)用myinit()方<beanid="feeDAO"lazy-init="true"scope="prototype"init-publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao1=(FeeDAO)}執(zhí)行test2方法,自定義的初始化的方法在對(duì)象被創(chuàng)建后調(diào)用,如圖-15所圖-<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-修改test2方法,關(guān)閉ApplicationContext//測(cè)試scope屬publicvoidStringconf=ApplicationContextacnewClassPathXmlApplicationContext(conf);FeeDAOfeeDao1=(FeeDAO)}運(yùn)行test2方法,如圖-16所示圖-我們發(fā)現(xiàn)沒(méi)有打印預(yù)期的“------銷毀 ”的結(jié)果。原因在修改<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-運(yùn)行test2方法,控制臺(tái)輸出了“------銷毀 ”,如圖-17所示圖-實(shí)Test2類代碼如下packageimportimportimportimportpublicclassTest2//測(cè)試對(duì)象創(chuàng)建時(shí)publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=}//測(cè)試scope屬publicvoidStringconf="applicationContext.xml";ApplicationContextac=new隱FeeDAOfeeDao1=FeeDAOfeeDao2=}}JdbcFeeDAO類代碼如下packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicvoidSystem.out.println("------進(jìn)行init初始 }publicvoidSystem.out.println("------銷毀 }publicSystem.out.println("------創(chuàng)建 }publicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息寫(xiě)入}publicpublicvoidSystem.out.println("采用JDBC方式將資費(fèi)信息更新表}}隱<?xmlversion="1.0"encoding="UTF-""""""<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-隱擴(kuò)DI問(wèn)在Spring中注入方式的應(yīng)用方使用spring01工程setter方法注新建HibernateFeeDAO,模擬Hibernate實(shí)現(xiàn)費(fèi)用的保存和更packagepublicclassHibernateFeeDAOimplementspublicvoidsave()System.out.println("采用Hibernate將資費(fèi)信息寫(xiě)入數(shù)據(jù)表}publicvoidupdate()System.out.println("采用Hibernate將資費(fèi)信息更新數(shù)據(jù)表}}FeeServiceImpl類,該類中調(diào)用FeeDAO的save方法packageimportpublicclassFeeServiceImpl//采用setter方式注入privateFeeDAOfeeDao;publicvoidsetFeeDao(FeeDAO{this.feeDao=}publicSystem.out.println("-----創(chuàng)建service對(duì) }public添加");feeDao.save();}}修}}<?xmlversion="1.0"encoding="UTF-<beans <beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-<!-<beanid="feeDAO"init-destroy-method="mydestroy"lazy---<beanid="feeDAO1"<beanid="feeService"<!--定義DI依賴注入關(guān)系<propertyname="feeDao"packageimport import importpublicclass{ *測(cè)試IOC依賴注*@parampublicstaticvoidmain(String[]args)Stringconf=ApplicationContextacnew//獲取容器中的FeeServiceImplservice= 運(yùn)行Test3,控制臺(tái)說(shuō)出結(jié)果如圖-18所示。調(diào)用到了HibernateFeeDAO類的savefeeDao注入值成功圖-構(gòu)造方式注新建FeeServiceImpl1,使用構(gòu)造方法給feeDao注入值packageimportpublicclassFeeServiceImpl1//采用setter方式注入privateFeeDAOfeeDao;publicFeeServiceImpl1(FeeDAOfeeDao){this.feeDao=feeDao;}publicvoid}}修改<?xmlversion="1.0"encoding="UTF-<beans <beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-<beanid="feeDAO1"<beanid="feeService"<!--定義DI依賴注入關(guān)系<propertyname="feeDao"<beanid="feeService1"<!--定義DI依賴注入關(guān)系<constructor-argindex="0"</constructor-新建packageimport import importpublicclass{ *測(cè)試IOC依賴注*@parampublicstaticvoidmain(String[]args)Stringconf=ApplicationContextacnew//獲取容器中的FeeServiceImpl1service= 運(yùn)行Test4,如圖-19所示。調(diào)用到了HibernateFeeDAO類的save方法,給feeDao注入值功圖-該如何選擇使用set方式注入還是構(gòu)造方式注實(shí)HibernateFeeDAO類代碼如下packagepublicclassHibernateFeeDAOimplementspublicvoidsave()System.out.println("采用Hibernate將資費(fèi)信息寫(xiě)入數(shù)據(jù)表}publicvoidupdate()System.out.println("采用Hibernate將資費(fèi)信息更新數(shù)據(jù)表}}隱FeeServiceImpl類代碼實(shí)現(xiàn)如下packageimportpublicpublicclassFeeServiceImpl//采用setter方式注入privateFeeDAOfeeDao;publicvoidsetFeeDao(FeeDAO{this.feeDao=}publicSystem.out.println("-----創(chuàng)建service對(duì) }public

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論