版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Spring技術(shù)第十六章Spring技術(shù)1)Spring概述2)Ioc技術(shù)3)
依賴(lài)注入4)配置文件5)用Spring整合其他JavaEE框架16.1Spring概述
Spring是一個(gè)開(kāi)源框架,它由RodJohnson創(chuàng)建。發(fā)布于著名的開(kāi)源項(xiàng)目網(wǎng)站SourceForge()Spring框架是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)技術(shù)和面向切面編程(AOP)技術(shù)的容器框架,利用Spring框架中的IoC技術(shù)可以實(shí)現(xiàn)JavaEE平臺(tái)中所倡導(dǎo)的由容器實(shí)現(xiàn)對(duì)象的生命周期管理,而利用Spring框架中的AOP技術(shù)可以實(shí)現(xiàn)JavaEE平臺(tái)中所倡導(dǎo)的分離應(yīng)用系統(tǒng)中業(yè)務(wù)邏輯組件和通用的技術(shù)服務(wù)組件。Spring是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。以IoC(控制反轉(zhuǎn))和AOP(面向切面編程)兩種技術(shù)為基礎(chǔ),較為完美地降低了企業(yè)級(jí)開(kāi)發(fā)的復(fù)雜度,大大降低了開(kāi)發(fā)基于Java企業(yè)級(jí)軟件的開(kāi)發(fā)成本。16.1Spring概述在Spring框架中為應(yīng)用系統(tǒng)的開(kāi)發(fā)者提供的是“對(duì)象管理”技術(shù),也就是為開(kāi)發(fā)者解決包括對(duì)象的生命周期、對(duì)象之間的依賴(lài)關(guān)系建立、對(duì)象的緩存實(shí)現(xiàn)等方面問(wèn)題的管理技術(shù)?!皩?duì)象管理”是每個(gè)面向?qū)ο缶幊痰某绦騿T都要面臨的問(wèn)題,將程序員從煩瑣、單調(diào)和重復(fù)的編程工作中解脫出來(lái),正是Spring框架的價(jià)值所在。1、輕量級(jí)框架
無(wú)論從框架的大小與使用開(kāi)銷(xiāo)兩方面而言Spring都是輕量級(jí)的。Spring是非侵入式的。使用Spring時(shí),完全不用繼承和實(shí)現(xiàn)Spring的類(lèi)和接口等。2、IoC容器
IoC(控制反轉(zhuǎn))是Spring的核心概念,Spring正是通過(guò)這種技術(shù)促進(jìn)了對(duì)象之間的松耦合。3、AOP實(shí)現(xiàn)面向切面編程(AOP)是Spring的又一強(qiáng)大功能。AOP可以將程序的業(yè)務(wù)代碼和系統(tǒng)服務(wù)代碼(如事務(wù)管理、日志記錄等)分離開(kāi),實(shí)現(xiàn)業(yè)務(wù)與非業(yè)務(wù)的分離。16.1.1Spring的特征4、容器
Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,JavaBean容器。5、框架Spring可以將簡(jiǎn)單的組件進(jìn)行配置,組合成為復(fù)雜的應(yīng)用。Spring也提供了很多基礎(chǔ)功能,如事務(wù)管理、持久化框架集成等。6、其它企業(yè)級(jí)服務(wù)Spring還封裝了一些企業(yè)級(jí)服務(wù)。這些企業(yè)服務(wù)包括:遠(yuǎn)程服務(wù)(Remoting)、電子郵件(E-mail)、JMS、JNDI、WebServices和任務(wù)調(diào)試等。16.1.1Spring的特征1、降低組件間的耦合度借助Spring,實(shí)現(xiàn)依賴(lài)注入、AOP應(yīng)用和面向接口編程,可以降低業(yè)務(wù)組件之間的耦合度,增強(qiáng)系統(tǒng)的擴(kuò)展性。2、AOP編程的支持通過(guò)Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過(guò)AOP輕松應(yīng)付,讓程序員可以集中精力處理業(yè)務(wù)邏輯。3、方便集成各種優(yōu)秀框架Spring不排斥各種優(yōu)秀的開(kāi)源框架,相反Spring可以降低各種框架的使用難度,Spring提供了對(duì)各種優(yōu)秀框架(如Struts,Hibernate)等的直接支持。16.1.2Spring的優(yōu)點(diǎn)16.1.3Spring的技術(shù)特征1、輕量:從大小與開(kāi)銷(xiāo)兩方面而言Spring都是輕量的。此外,Spring是非侵入式的。使用Spring,我們的類(lèi)還是pojo類(lèi),完全不用繼承和實(shí)現(xiàn)Spring的類(lèi)和接口等。也就是說(shuō),使用Spring的應(yīng)用中的對(duì)象不依賴(lài)于Spring的特定類(lèi)。2、IoC:Spring通過(guò)控制反轉(zhuǎn)技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴(lài)的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴(lài)對(duì)象。不是我們自己控制對(duì)象從容器中查找依賴(lài),而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴(lài)傳遞給它,這就是DI——依賴(lài)注入?;旧暇褪菍?duì)象不用自己動(dòng)手管理和創(chuàng)建。完全由容器管理,我們只管用就行。
16.1.3Spring的技術(shù)特征3、AOP:Spring提供了面向切面的編程支持,AOP將與程序業(yè)務(wù)無(wú)關(guān)的內(nèi)容分離提取,應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯,僅此而已。它們并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。AOP將與業(yè)務(wù)無(wú)關(guān)的邏輯橫切進(jìn)真正的邏輯中。4、容器:Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring的容器也是輕量級(jí)的。
16.1.3Spring的技術(shù)特征5、框架:Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),而用戶(hù)就有更多的時(shí)間和精力去開(kāi)發(fā)應(yīng)用邏輯。
所有Spring的這些特征都能幫助我們編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
16.1.4Spring的組織結(jié)構(gòu)采用分層架構(gòu),整個(gè)框架由7個(gè)定義良好的模塊(組件)構(gòu)成,它們都統(tǒng)一構(gòu)建于核心容器之上,分層架構(gòu)允許用戶(hù)選擇使用任意一個(gè)模塊。1、核心模塊
Core模塊是Spring的核心容器,它實(shí)現(xiàn)了IoC模式,提供了Spring框架的基礎(chǔ)功能。2、Context模塊Context模塊提供BeanFactory功能,并且添加了事件處理、國(guó)際化以及數(shù)據(jù)校驗(yàn)等功能,。3、AOP模塊Spring集成了所有AOP功能。Spring提供了用標(biāo)準(zhǔn)Java語(yǔ)言編寫(xiě)的AOP框架,它的大部分內(nèi)容都是基于AOP聯(lián)盟的API開(kāi)發(fā)的。4、DAO模塊
DAO模塊提供了JDBC的抽象層,并且提供了對(duì)聲明式事務(wù)和編程式事務(wù)的支持。16.1.4Spring的組織結(jié)構(gòu)5、ORM映射模塊
SpringORM模塊提供了對(duì)現(xiàn)有ORM框架的支持。6、Web模塊
SpringWeb模塊建立在SpringContext基礎(chǔ)之上,它提供了Servlet監(jiān)聽(tīng)器的Context和Web應(yīng)用的上下文,對(duì)現(xiàn)有的Web框架(如JSF、Tapestry、Struts等)提供了集成。7、MVC模塊
SpringWebMVC模塊建立在Spring核心功能之上,這使它能擁有Spring框架的所有特性,能夠適應(yīng)多種多視圖、模板技術(shù)、國(guó)際化和驗(yàn)證服務(wù),實(shí)現(xiàn)控制邏輯和業(yè)務(wù)邏輯的清晰分離。16.1.4Spring的組織結(jié)構(gòu)16.2IoC的基本概念I(lǐng)oC(InversionofControl,控制反轉(zhuǎn)),是指應(yīng)用程序中對(duì)象的創(chuàng)建、銷(xiāo)毀等不再由程序本身編碼實(shí)現(xiàn),而是由外部的Spring容器在程序運(yùn)行時(shí)根據(jù)需要注入到程序中。也就是對(duì)象的生命周期不是由程序本身決定,而是由容器來(lái)控制,所以稱(chēng)為控制反轉(zhuǎn)??刂茩?quán)的轉(zhuǎn)移帶來(lái)的好處就是降低了對(duì)象間的依賴(lài)關(guān)系。Spring框架是一個(gè)輕量級(jí)框架,通過(guò)IoC容器統(tǒng)一管理各組件之間的依賴(lài)關(guān)系來(lái)降低組件之間耦合的緊密程度。由此看來(lái),IoC是整個(gè)Spring框架的核心16.2.1IoC實(shí)例1【例1】不同動(dòng)物,移動(dòng)方式不相同,有的跑(run),有的飛(fly)1、創(chuàng)建接口類(lèi)MoveablepublicinterfaceMoveable{voidmove();}2、創(chuàng)建類(lèi)org.Animal,實(shí)現(xiàn)Moveable接口publicclassAnimalimplementsMoveable{
//類(lèi)Animal有2個(gè)屬性privateStringanimalType;//何種動(dòng)物privateStringmoveMode;//如何move
//animalType屬性的setter函數(shù)publicvoidsetAnimalType(StringanimalType){this.animalType=animalType;}//moveMode屬性的setter函數(shù)publicvoidsetMoveMode(StringmoveMode){this.moveMode=moveMode;}//move接口的實(shí)現(xiàn)publicvoidmove(){
StringmoveMessage=animalType+"can"+moveMode;System.out.println(moveMessage);}}16.2.1IoC實(shí)例13、添加Spring配置信息。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi=/2001/XMLSchema-instance xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd"> <beanid="animal"class=“org.Animal"> <propertyname="animalType"> <value>Bird</value> </property> <propertyname="moveMode"><value>fly</value></property> </bean></beans>16.2.1IoC實(shí)例14、創(chuàng)建測(cè)試類(lèi)TestclassTest{publicstaticvoidmain(String[]args){//創(chuàng)建Spring容器
ApplicationContextctx=newClassPathXmlApplicationContext(“ApplicationContext.xml");//從容器中獲取Animal類(lèi)的實(shí)例
Moveableanimal=(Moveable)ctx.getBean("animal");//調(diào)用move方法
animal.move();//運(yùn)行結(jié)果:Birdcanfly}}5、不改變測(cè)試類(lèi)Test,只改變配置文件,實(shí)現(xiàn)業(yè)務(wù)邏輯更改修改moveMessage和moveMode的值:<beanid="animal"class="ioc.Animal"><propertyname="animalType"><value>Dog</value></property><propertyname="moveMode"><value>run</value></property></bean>再次運(yùn)行程序,結(jié)果變?yōu)椋篋ogcanrun16.2.2對(duì)象的三種創(chuàng)建方式軟件系統(tǒng)中,對(duì)象的創(chuàng)建方式分為三類(lèi):自己創(chuàng)建、工廠(chǎng)模式和外部注入,其中外部注入就是IoC模式??梢杂萌齻€(gè)形象的動(dòng)詞來(lái)分別表示這三個(gè)調(diào)用方法,即new、get和set,new表示對(duì)象由自己通過(guò)new創(chuàng)建,get表示從別人(即工廠(chǎng))那里取得,set表示由別人推送進(jìn)來(lái)(注入),其中g(shù)et和set分別表示了主動(dòng)去取和等待送來(lái)兩種截然不同的方式。16.2.2Ioc實(shí)例2對(duì)實(shí)例1進(jìn)行擴(kuò)展,考慮Animal類(lèi),有時(shí)需要將moveMessage在屏幕中顯示出來(lái),有時(shí)又需要將它寫(xiě)入文件,在Animal類(lèi)中引入MessagePrinter接口類(lèi),由它負(fù)責(zé)將信息輸出到控制臺(tái)或文件中。publicinterfaceMessagePrinter{voidprintMessage(StringMessage);}publicScreenPrinterimplementsMessagePrinter{voidprintMessage(StringMessage){System.out.println(Message+“on”+“Screen”).}publicFilePrinterimplementsMessagePrinter{voidprintMessage(StringMessage){System.out.println(Message+“on”+“File”).}方式1、new----自己創(chuàng)建(1)修改Animal類(lèi),增加一個(gè)MessagePrinter類(lèi)型的依賴(lài)對(duì)象printer,由它決定信息如何輸出。publicclassAnimalimplementsMoveable{//保持Moveable接口不變
…
privateMessagePrinterprinter;publicvoidmove(){StringmoveMessage=animalType+"can"+moveMode;printer.printMessage(moveMessage);}
publicvoidsetPrinter(MessagePrinterprinter){//注入printerthis.printer=printer;}}方式1、new----自己創(chuàng)建(2)創(chuàng)建測(cè)試類(lèi)publicclassTestNew{publicstaticvoidmain(String[]args){MessagePrinterprinter=newScreenPrinter//創(chuàng)建屏幕輸出類(lèi)
Animalanimal=newAnimal();//創(chuàng)建Animal類(lèi)();
animal.setAnimalType("Bird");animal.setMoveMode("fly");
animal.setPrinter(printer);
animal.move();}}輸出:Birdcanfly如果需要將信息輸出到文件中,則必須將:MessagePrinterprinter=newScreenPrinter();//創(chuàng)建屏幕輸出類(lèi)修改為:MessagePrinterprinter=newFilePrinter();//創(chuàng)建文件輸出類(lèi)這種方法的缺點(diǎn):無(wú)法更換被調(diào)用者,除非修改源代碼。方式2:get----工廠(chǎng)模式(1)創(chuàng)建PrinterFactory工廠(chǎng)類(lèi)publicclassPrinterFactory{
//產(chǎn)生ScreenPrinterpublicstaticMessagePrintergetScreenPrinter(){MessagePrinterprinter=newScreenPrinter();returnprinter;}//產(chǎn)生FilePrinterpublicstaticMessagePrintergetFilePrinter(){MessagePrinterprinter=newFilePrinter();returnprinter;}}方式2:get----工廠(chǎng)模式(2)創(chuàng)建測(cè)試類(lèi)TestGetpublicclassTestGet{publicstaticvoidmain(String[]args){//屏幕輸出類(lèi)
MessagePrinterprinter=PrinterFactory.getScreenPrinter();
Animalanimal=newAnimal();animal.setAnimalType("Bird");animal.setMoveMode("fly");animal.setPrinter(printer);animal.move();}}輸出:BirdcanflyonScreen如果需要將信息輸出到文件中,則必須修改代碼為:MessagePrinterprinter=PrinterFactory.getFilePrinter();//文件輸出類(lèi)可以看出:Animal類(lèi)依賴(lài)的MessagePrinter對(duì)象由工廠(chǎng)統(tǒng)一創(chuàng)建,使調(diào)用者無(wú)需關(guān)心對(duì)象的創(chuàng)建過(guò)程,只管從工廠(chǎng)中取得即可。這種方法實(shí)現(xiàn)了一定程度的優(yōu)化,使得代碼的邏輯趨于統(tǒng)一。缺點(diǎn)是對(duì)象的創(chuàng)建和替換依然不夠靈活,完全取決于工廠(chǎng),并且多了一道中間工序。方式3:set----外部注入顯然方法1和方法2都有其缺陷,不夠靈活,這里我們使用IoC。(1)設(shè)置配置文件ApplicationContext.xml<beanid="movePrinter"class=“zjc.ScreenPrinter"></bean><beanid="animal"class=“org.Animal"> <propertyname="printer"ref="movePrinter"/> <propertyname="animalType"> <value>Bird</value> </property> <propertyname="moveMode"> <value>fly</value> </property></bean>org.Animal類(lèi)的對(duì)象共依賴(lài)三個(gè)對(duì)象,分別為printer、animalType和moveMode,它們的值分別通過(guò)相應(yīng)的設(shè)值方法setPrinter()、setAnimalType()和setMoveMode()由IoC容器注入到對(duì)象中。方式3:set----外部注入(2)創(chuàng)建測(cè)試類(lèi)TestIocclassTestIoc{publicstaticvoidmain(String[]args){//創(chuàng)建Spring容器
ApplicationContextctx=newClassPathXmlApplicationContext(“ApplicationContext.xml");//從容器中獲取Animal類(lèi)的實(shí)例
Moveableanimal=(Moveable)ctx.getBean("animal");//調(diào)用move方法
animal.move();}}輸出:BirdcanflyonScreen(3)設(shè)置配置文件ApplicationContext.xml<beanid="movePrinter"class=“org.FilePrinter"></bean><beanid="animal"class=“org.Animal"> <propertyname="printer"ref="movePrinter"/> <propertyname="animalType"> <value>Bird</value> </property> <propertyname="moveMode"> <value>fly</value> </property></bean>需要輸出到文件只要修改配置文件,用FilePrinter替換ScreenPrinter輸出:BirdcanflyonScreen
在第三種方式中,我們沒(méi)有修改源程序,而只是修改了配置文件ApplicationContext.xml的內(nèi)容,就實(shí)現(xiàn)了信息輸出從控制臺(tái)到文件的切換.
也就是說(shuō),采用IoC我們不需要重新修改并編譯具體的Java代碼就實(shí)現(xiàn)了對(duì)程序功能的動(dòng)態(tài)修改,實(shí)現(xiàn)了熱插拔,提高了靈活性。
可見(jiàn),這種方式可以完全拋開(kāi)依賴(lài)的限制,由外部容器自由地注入,這就是IoC,將對(duì)象的創(chuàng)建和獲取提到外部,由外部容器提供需要的組件。依賴(lài)注入(DI,DependencyInjection),是MartinFowler在他的經(jīng)典文章《InversionofControlContainersandtheDependencyInjectionpattern》中為IoC另取的一個(gè)更形象的名字。依賴(lài)注入有2種方式,即setter方法注入(setterinjection)和構(gòu)造方法注入(constructorinjection),這兩者是應(yīng)用Spring時(shí)較為常用的注入方式。16.3依賴(lài)注入在各種類(lèi)型的依賴(lài)注入方式中,setter(設(shè)值)方法注入在實(shí)際開(kāi)發(fā)中使用最為廣泛,基于設(shè)值的依賴(lài)注入機(jī)制比較直觀、自然。在上例中,Animal類(lèi)中的animalType和moveMode屬性的值,都是通過(guò)相應(yīng)的設(shè)值方法setAnimalType()和setMoveMode(),將配置文件ApplicationContext.xml中指定的值(value部分)分別注入給這兩個(gè)屬性。Animal類(lèi)中的printer屬性的值,都是通過(guò)相應(yīng)的設(shè)值方法setPrinter()將配置文件ApplicationContext.xml中指定的值(ref部分)注入給這個(gè)屬性。16.3.1setter方法注入構(gòu)造方法注入:依賴(lài)關(guān)系是通過(guò)類(lèi)構(gòu)造函數(shù)建立,容器通過(guò)調(diào)用類(lèi)的構(gòu)造方法,將其所需的參數(shù)值注入其中。1)修改構(gòu)造函數(shù),刪除原有的3個(gè)屬性的getter和setter函數(shù)
publicclassAnimal1implementsMoveable{//Moveable接口不變
privateStringanimalType;privateStringmoveMode;
privateMessagePrinterprinter;publicAnimal1(StringanimalType,StringmoveMode,MessagePrinterprinter){this.animalType=animalType;this.moveMode=moveMode;this.printer=printer;}}2)修改ApplicationContext.xml文件的內(nèi)容,新增bean對(duì)象animal1,<bean>元素的內(nèi)容如下:<beanid="animal1"class=“org.Animal1"><constructor-argindex="0"type="java.lang.String"value="Bird"/><constructor-argindex="1"type="java.lang.String"value="fly"/><constructor-argindex="2"type="zjc.MessagePrinter“ref="movePrinter”/></bean>16.3.2構(gòu)造方法注入1、setter注入這種注入方式與傳統(tǒng)的JavaBean寫(xiě)法很相似,程序員更容易理解和接受,通過(guò)setter方式設(shè)定依賴(lài)關(guān)系顯得更加直觀、自然。缺點(diǎn):組件使用者或許會(huì)忘記組件注入需要的依賴(lài)關(guān)系,依賴(lài)可能會(huì)因setter方法的調(diào)用而被修改。2、構(gòu)造注入優(yōu)點(diǎn):構(gòu)造注入可以在構(gòu)造器中決定依賴(lài)關(guān)系的注入順序,優(yōu)先依賴(lài)的優(yōu)先注入。依賴(lài)關(guān)系只能在構(gòu)造器中設(shè)定,則只有組件的創(chuàng)建者才能改變組件的依賴(lài)關(guān)系。對(duì)組件的調(diào)用者而言,組件內(nèi)部的依賴(lài)關(guān)系完全透明,更符合高內(nèi)聚的原則。缺點(diǎn):對(duì)于復(fù)雜的依賴(lài)關(guān)系,如果采用構(gòu)造注入,會(huì)導(dǎo)致構(gòu)造器過(guò)于臃腫,難以閱讀。16.3.3兩種依賴(lài)注入方式的對(duì)比1.Spring通過(guò)ApplicationContext接口來(lái)實(shí)現(xiàn)對(duì)容器的加載。2.ApplicationContext的實(shí)現(xiàn)類(lèi)有:(1)ClassPathXmlApplicationContext:從classpath下加載配置文件(2)FileSystemXmlApplicationContext:從文件系統(tǒng)中加載配置文件3.加載容器:我們可以通過(guò)任一實(shí)現(xiàn)類(lèi)來(lái)將配置文件中定義的Bean加載到容器中。
(1)ApplicationContextctx=newClassPathXmlApplicationContext(“ApplicationContext.xml");或者
(2)ApplicationContextctx=newFileSystemXmlApplicationContext(“c:\\ApplicationContext.xml");4.獲取實(shí)例://從容器中獲取Animal類(lèi)的實(shí)例:bean配置id為animal的對(duì)象Moveableanimal=(Moveable)ctx.getBean("animal");16.4配置文件1.Spring配置文件裝載過(guò)程2.Spring的配置文件內(nèi)容屬性或子標(biāo)簽描述舉例id代表JavaBean
的實(shí)例對(duì)象。在Bean實(shí)例化之后可以通過(guò)id來(lái)引用Bean的實(shí)例對(duì)象<beanid="animal"class=“org.Animal"/>name代表JavaBean的實(shí)例對(duì)象名。與id屬性的意義基本相同。<beanname="animal"class=“org.Animal"/>classJavaBean的類(lèi)名(全路徑),它是<bean>標(biāo)簽必須指定的屬性同上singleton是否使用單例(Singleton)模式。false,在每次調(diào)用容器的getBean()方法時(shí),都會(huì)返回新的實(shí)例對(duì)象。默認(rèn)true,那么在Spring容器的上下文中只維護(hù)此JavaBean的一個(gè)實(shí)例。<beanname="animal"class=“org.Animal"singleton="false"/>autowireSpring的JavaBean自動(dòng)裝配功能<property>可通過(guò)<value/>節(jié)點(diǎn)可指定屬性值。BeanFactory將自動(dòng)根據(jù)JavaBean對(duì)應(yīng)的屬性類(lèi)型加以匹配。<propertyname="moveMode"><value>fly</value></property><constructor-arg>構(gòu)造方法注入時(shí)確定構(gòu)造參數(shù)。index指定參數(shù)順序,type指定參數(shù)類(lèi)型。<constructor-argindex="0"type="java.lang.String"value="fly"/><ref>指定了屬性對(duì)BeanFactory中其他Bean的引用關(guān)系。<beanid="prt"class="org.FilePrinter"/><beanid="animal"class="org.Animal"><propertyname="printer"ref="prt"/></bean>16.5用Spring整合其他JavaEE框架16.5.1Spring與Struts2整合基本思路是:在已經(jīng)開(kāi)發(fā)好的Struts2項(xiàng)目中,添加Spring框架,把用戶(hù)自己編寫(xiě)的Action模塊交給Spring容器管理,如圖所示。1.修改struts.xml中action節(jié)的class屬性<packagename="default"extends="struts-default"><actionname
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版大型酒店集團(tuán)客房布草集中采購(gòu)合作協(xié)議3篇
- 二零二五年度醫(yī)療健康產(chǎn)業(yè)投資合作協(xié)議3篇
- 二零二五版海洋風(fēng)味連鎖加盟店合作協(xié)議3篇
- 二零二五版國(guó)際貿(mào)易結(jié)算付款擔(dān)保協(xié)議書(shū)3篇
- 2025年度甲方與乙方共建研發(fā)中心的合作協(xié)議6篇
- 定制衣柜合同協(xié)議書(shū)范本
- 無(wú)償車(chē)輛租賃協(xié)議
- 汽車(chē)庫(kù)租賃協(xié)議
- 工程施工項(xiàng)目合作協(xié)議書(shū)(雙方現(xiàn)用)
- 2024承包食堂合同
- 2025年湖北武漢工程大學(xué)招聘6人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 【數(shù) 學(xué)】2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)期末能力提升卷
- GB/T 26846-2024電動(dòng)自行車(chē)用電動(dòng)機(jī)和控制器的引出線(xiàn)及接插件
- 陜西省咸陽(yáng)市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 綠城物業(yè)室內(nèi)公共區(qū)域清潔作業(yè)規(guī)程
- 封條模板A4直接打印版
- 危險(xiǎn)貨物道路運(yùn)輸企業(yè)安全檢查通用清單
- 用友NC財(cái)務(wù)軟件操作手冊(cè)
- 眼內(nèi)炎患者護(hù)理查房
- 電工維修培訓(xùn)資料 維修電工技術(shù)學(xué)習(xí) 維修電工常識(shí) 電工培訓(xùn)ppt課件
- 撲克牌24點(diǎn)練習(xí)題大全
評(píng)論
0/150
提交評(píng)論