spring1第一章概述與軟件組裝技術(shù)_第1頁
spring1第一章概述與軟件組裝技術(shù)_第2頁
spring1第一章概述與軟件組裝技術(shù)_第3頁
spring1第一章概述與軟件組裝技術(shù)_第4頁
spring1第一章概述與軟件組裝技術(shù)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

OracleJavaEE實(shí)訓(xùn)教材系列之十一Spring原理與ioc課程介紹(1/3)Spring對(duì)軟件工程的意義模塊化設(shè)計(jì)松散藕合或者解藕合面向(aspect)方面編程針對(duì)struts和hibernate的兼容性支持統(tǒng)一的事務(wù)解決方案課程介紹(2/3)Spring核心功能集中創(chuàng)建和管理對(duì)象DI(DependencyInjection/InverseofController)AOP(AspectOrientedProgramming)Spring擴(kuò)展功能MVC持久化AOP事務(wù)課程介紹(3/3)Spring軟件體系結(jié)構(gòu)第一章Spring概述及軟件組裝技術(shù)本章內(nèi)容課程介紹Spring是什么使用依賴注入實(shí)現(xiàn)軟件部件的組裝依賴注入(DependencyInjection)控制反轉(zhuǎn)(InversionofControl)Spring是什么Spring是一個(gè)開源的控制反轉(zhuǎn)(InversionofControl,IoC)和面向切面(AOP)的容器框架.它的主要目得是簡(jiǎn)化企業(yè)開發(fā).控制反轉(zhuǎn)publicclassUserServiceImpl{

privateUserDaouserDao=newUserDaoImpl();

publicvoidsave(Useruser){userDao.save(user);}}UserDaoImpl

是在應(yīng)用內(nèi)部創(chuàng)建及維護(hù)的。所謂控制反轉(zhuǎn)就是應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建及維護(hù),依賴對(duì)象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)。依賴注入當(dāng)我們把依賴對(duì)象交給外部容器負(fù)責(zé)創(chuàng)建,那么UserServiceImpl類可以改成如下:public

classUserServiceImplimplementsUserService{

privateUserDaouserDao;//通過構(gòu)造器參數(shù),讓容器把創(chuàng)建好的依賴對(duì)象注入進(jìn)UserServiceImpl,當(dāng)然也可以使用setter方法進(jìn)行注入。publicUserServiceImpl(UserDaouserDao){//構(gòu)造方法注入

this.userDao=userDao;}@Overridepublic

voidaddUser(Useruser){//TODOAuto-generatedmethodstubSystem.out.println("UserServiceImpl.....addUser()....");userDao.addUser(user);}所謂依賴注入就是指:在運(yùn)行期,由外部容器動(dòng)態(tài)地將依賴對(duì)象注入到組件中。Springioc舉例User對(duì)象publicclassUser{privateStringuserName;privateStringpassword;publicUser(){}setter/getter…}userDao接口publicinterfaceUserDao{publicvoidaddUser(Useruser);publicvoiddelUser(intuserId);publicvoidmodifyUser(Useruser)publicStringfindUser(intuserId);}UserDaoImpl實(shí)現(xiàn)publicclassUserDaoImplimplementsUserDao{publicUserDaoImpl(){System.out.println("構(gòu)造方法userdaoimpl...");}@OverridepublicvoidaddUser(Useruser){//TODOAuto-generatedmethodstubSystem.out.println("userdao....addUser");}//其它方省略…}Service層接口publicinterfaceUserService{publicvoidaddUser(Useruser);publicvoiddelUser(intuserId);publicvoidmodifyUser(Useruser);publicStringfindUser(intuserId);}UserServiceImpl實(shí)現(xiàn)publicclassUserServiceImplimplementsUserService{privateUserDaouserDao;publicvoidsetUserDao(UserDaouserDao){//設(shè)置注入System.out.println("setteruserDao....");this.userDao=userDao;}@OverridepublicvoidaddUser(Useruser){//TODOAuto-generatedmethodstubSystem.out.println("UserServiceImpl.....addUser()....");userDao.addUser(user);}//其它方法略…}編輯配置文件(配置bean)<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns=""xmlns:xsi=""xmlns:p=""xsi:schemaLocation=""><beanid="ud"class="com.jmt.user.dao.impl.UserDaoImpl"></bean><beanid="us"class="com.jmt.user.service.impl.UserServiceImpl">

<propertyname="userDao"ref="ud"></property></bean></beans>實(shí)例化spring容器實(shí)例化Spring容器常用的兩種方式:方法一:在類路徑下尋找配置文件來實(shí)例化容器ApplicationContextctx=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});方法二:在文件系統(tǒng)路徑下尋找配置文件來實(shí)例化容器ApplicationContextctx=newFileSystemXmlApplicationContext(newString[]{“d:\\applicationContext.xml“});Spring的配置文件可以指定多個(gè),可以通過String數(shù)組傳入。從spring容器中得到bean當(dāng)spring容器啟動(dòng)后,因?yàn)閟pring容器可以管理bean對(duì)象的創(chuàng)建,銷毀等生命周期,所以我們只需從容器直接獲取Bean對(duì)象就行,而不用編寫一句代碼來創(chuàng)建bean對(duì)象。從容器獲取bean對(duì)象的代碼如下:

ApplicationContextact=newClassPathXmlApplicationContext("applicationContext.xml");System.out.println("aaa");UserDaous=(UserDao)act.getBean("ud");Useruser=newUser();user.setUserName(“張三");user.setPassword("123");us.addUser(user);維護(hù)依賴的關(guān)系典型的應(yīng)用程序降低組件之間的耦合度,實(shí)現(xiàn)軟件各層之間的解耦。三種實(shí)例化bean的方式1.使用類構(gòu)造器實(shí)例化<beanid="userService"class="com.jmt.service.impl.UserServiceBean"></bean>2.使用靜態(tài)工廠方法實(shí)例化<beanid="userService2"class="com.jmt.service.impl.UserServiceBeanFactory"

factory-method="createUserServiceBean"/>3.使用實(shí)例工廠方法實(shí)例化:

<beanid="userServiceFactory"class="com.jmt.service.impl.UserServiceBeanFactory"/><beanid="userService3"factory-bean="userServiceFactory"factory-method="createUserServiceBean2"/>

Bean的作用域.singleton

在每個(gè)SpringIoC容器中一個(gè)bean定義只有一個(gè)對(duì)象實(shí)例。默認(rèn)情況下會(huì)在容器啟動(dòng)時(shí)初始化bean,但我們可以指定Bean節(jié)點(diǎn)的lazy-init=“true”來延遲初始化bean,這時(shí)候,只有第一次獲取bean會(huì)才初始化bean。如:

<beanid="hello"class="com.jmt.bean.HelloWorld"lazy-init="true"><propertyname="info"value="hellospring"></property></bean>如果想對(duì)所有bean都應(yīng)用延遲初始化,可以在根節(jié)點(diǎn)beans設(shè)置default-lazy-init=“true“,如下:<beansdefault-lazy-init="true“...>.prototype

每次從容器獲取bean都是新的對(duì)象。

.request.session.globalsessionBean的初始化方法和銷毀方法指定Bean的初始化方法和銷毀方法<beanid="userService"class="com.jmt.service.impl.UserServiceBean"lazy-init="false"init-method="init"destroy-method="destory"></bean>注入依賴對(duì)象1.設(shè)置注入<beanid="ud"class="com.jmt.user.dao.impl.UserDaoImpl"></bean><beanid="us"class="com.jmt.user.service.impl.UserServiceImpl"><propertyname="userDao"ref="ud"></property>

</bean>2.構(gòu)造注入

<beanid="ud"class="com.jmt.user.dao.impl.UserDaoImpl"></bean><beanid="us"class="com.jmt.user.service.impl.UserServiceImpl"><constructor-argindex="0"ref="ud"></constructor-arg></bean>集合類型與日期的裝配publicclassBeans{privateListlistValue;privateSetsetValue;privateString[]arrayValue;privateMapmapValue;privateDatedateValue;privatePropertiesprops;//setter/getter方法省略}applicationContext.xml<propertyname="dateValue"value="2011年11月11日"></property><propertyname="listValue"><list><value>aaa</value><value>bbb</value><value>ccc</value></list></property><propertyname="arrayValue"><list><value>cc</value><value>dd</value><value>ee</value></list></property>applicationContext.xml<propertyname="mapValue"><map><entry><key><value>k1</value></key><value>aa</value></entry><entry><key><value>k2</value></key><value>bb</value></entry></map></property>applicationContext.xml

<propertyname="setValue"><set><value>ss1</value><value>ss2</value><value>ss3</value></set></property><propertyname="props"><props><propkey="P1">P1</prop><propkey="P2">P2</prop></props></property>日期PropertyEditorSupportpublicclassUtilDatePropertyEditorextendsPropertyEditorSupport{privateStringpattern;@OverridepublicvoidsetAsText(Stringtext)throwsIllegalArgumentException{System.out.println("------>"+text);try{Datedate=newSimpleDateFormat(pattern).parse(text);this.setValue(date);}catch(ParseExceptione){//TODOAuto-generatedcatchblocke.printStackTrace(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論