學(xué)習(xí)spring教程Spring框架是一個(gè)開源的Java平臺(tái)它為容易而快速開發(fā)_第1頁(yè)
學(xué)習(xí)spring教程Spring框架是一個(gè)開源的Java平臺(tái)它為容易而快速開發(fā)_第2頁(yè)
學(xué)習(xí)spring教程Spring框架是一個(gè)開源的Java平臺(tái)它為容易而快速開發(fā)_第3頁(yè)
學(xué)習(xí)spring教程Spring框架是一個(gè)開源的Java平臺(tái)它為容易而快速開發(fā)_第4頁(yè)
學(xué)習(xí)spring教程Spring框架是一個(gè)開源的Java平臺(tái)它為容易而快速開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩201頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SpringJavaJava本是基于在2015年3月發(fā)布的Spring框架4.1.6版本編寫的。本是為需要詳細(xì)了解Spring框架的體系結(jié)構(gòu)和實(shí)際應(yīng)用的Java程序員設(shè)計(jì)的。本將帶你達(dá)到中級(jí)的專在進(jìn)行本之前,你應(yīng)該對(duì)Java編程語(yǔ)言有一個(gè)很好的了解。對(duì)EclipseIDE的基本了解也是必須的,因?yàn)樗械氖纠际鞘褂肊clipseIDE進(jìn)行編譯的。前 第1 概 第1 依賴注入 第2 體系結(jié) 第3 環(huán)境設(shè) 第4 oWorld實(shí) 第5 IoC容 S的BeanFactory容 Springox容 第6 Bean定 第7 Bean的作用 第8 Bean的生命周 第9 Spring——Bean后置處理 第10 Bean定義繼 依賴注 Spring基于構(gòu)造函數(shù)的依賴注 Spring基于設(shè)值函數(shù)的依賴注 第12 注入內(nèi)部 第13 注入集 第14 Beans自動(dòng)裝 Spring自動(dòng)裝配 Spring自動(dòng)裝配 Spring由構(gòu)造函數(shù)自動(dòng)裝 第15 基于注解的配 Springqe注 Spring@Autowired注 Springl注 SpringJSR-250注 第16 基于Java的配 第17 Spring中 處 第18 Spring中的自定 第19 Spring框架的 Spring中基于AOP的XML架 Spring中基于AOP的 第20 JDBC框架概 SpringJDBC示 第21 事務(wù)管 Spring編程式事務(wù)管 Spring式事務(wù)管 第22 MVC框 SpringMVCoWorld例 SpringMVC表單處理例 Spring頁(yè)面重定向例 Spring靜態(tài)頁(yè)面例 Spring異常處理例 第23 使用Log4J記錄日 1Spring是最受歡迎的企業(yè)級(jí)JavaSpring框架來(lái)SpringJavaRodJohnson2003年6當(dāng)談?wù)摰酱笮『蜁r(shí),Spring是輕量級(jí)的。Spring框架的基礎(chǔ)版本是在2MB左右的Spring框架的特性可以用于開發(fā)任何Java應(yīng)用程序,但是在JavaEE平臺(tái)上構(gòu)建web應(yīng)用程序是需要擴(kuò)展的。Spring框架的目標(biāo)是使J2EE開發(fā)變得更容易使用,通過啟用基于POJOSpringSpringSpringPOJOsPOJOsEJB容器產(chǎn)品,比如一個(gè)應(yīng)用程序服務(wù)器,但是你可以選擇使用一個(gè)健壯的etTomcat或者一Spring在一個(gè)單元模式中是有組織的。即使包和類的數(shù)量非常大,你必須并且只需要但是你需要的,而忽略SpringORMJEE、Quartz和JDK計(jì)時(shí)器,其他視圖技術(shù)。測(cè)試一個(gè)用Spring編寫的應(yīng)用程序很容易,因?yàn)閑nvinmentdependent代碼被放進(jìn)了這個(gè)框架中。此外,通過使用JavaBean-stylePOJOs,它在使用依賴注入注入測(cè)試數(shù)據(jù)時(shí)變得更容易。Spring的web框架是一個(gè)設(shè)計(jì)良好的webMVC框架,它為web框架,比如Structs或者其他工程上的或者很少受歡迎的web框架,提供了一個(gè)很好的供替代的選擇。了一個(gè)方便的API,而這些都是 IOCEJBCPU庫(kù))和擴(kuò)展成一個(gè)全局事務(wù)(例如,使用JTA)。1(DI)|11(DI)|Spring最認(rèn)同的技術(shù)是控制反轉(zhuǎn)的依賴注入(DI)模式??刂品崔D(zhuǎn)(IoC)是一個(gè)通用的概念,它可以用許多不當(dāng)編寫一個(gè)復(fù)雜的Java應(yīng)用程序時(shí),應(yīng)用程序類應(yīng)該盡可能的獨(dú)立于其他的Java類來(lái)增加這些類可重用額可能性,當(dāng)進(jìn)行單元測(cè)試時(shí),可以使它們獨(dú)立于其他類進(jìn)試。依賴注入(或者有時(shí)被稱為配線)有助于將這些ABBoCA依賴注入可以以向構(gòu)造函數(shù)傳遞參數(shù)的方式發(fā)生,或者通過使用setterpost-construction。由于依賴注入是Spring框架的部分,所以我將在一個(gè)單獨(dú)的章節(jié)中利用很好的例子去解釋這一概念。面向方面的程序設(shè)計(jì)Spring框架的一個(gè)關(guān)鍵組件是面向方面的程序設(shè)計(jì)(AOP框架。一個(gè)程序中多個(gè)點(diǎn)的功能被稱為橫切關(guān)注點(diǎn)志記錄、性事務(wù)、安全,和緩存等等。OOPAOPAOPSpring框架的AOP模塊提供了面向方面的程序設(shè)計(jì)實(shí)現(xiàn),允許你定義器方法和切入點(diǎn),可以實(shí)現(xiàn)將應(yīng)該被分 關(guān)于SpringAOP的概念。2Spring有可能成為所有企業(yè)應(yīng)用程序的一站式服務(wù)點(diǎn),然而,Spring是模塊化的,允許你挑選和選擇適用于你的模塊,不必要把剩余部分也引入。下面的部分對(duì)在Spring框架中所有可用的模塊給出了詳細(xì)的介紹。Spring20oCBean模塊提供BeanFactorytionContext接口是上下文模塊的重點(diǎn)。ORMAPI,包括PJ,Hibernate和iBatis,Java消息服務(wù)JMS事務(wù)模塊為實(shí)現(xiàn)特殊接口的類及所有的POJO支持編程式和式事務(wù)管理WebWeb,Web-MVC,Web-SocketWeb-PortletWeb模塊提供了基本的面向web的集成功能,例如多個(gè)文件上傳的功能和使用srvlet器和面向oCWeb-MVC模塊包含Spring的模型-視圖-控制器(MVC),實(shí)現(xiàn)了web應(yīng)用程序。eb-Socket模塊為WebSocet-bsedwebWeb-Portlet模塊提供了在portlet環(huán)境中實(shí)現(xiàn)MVC,并且反映了Web-Sevlet模塊的功能。還有其他一些重要的模塊,像AOP,Aspects,Instrumentation,WebAOP模塊提供了面向方面的編程實(shí)現(xiàn),允許你定義方法器和切入點(diǎn)對(duì)代碼進(jìn)行干凈地解耦,它實(shí)現(xiàn)了應(yīng)Aspects模塊提供了與AspectJ的集成,這是一個(gè)功能強(qiáng)大且成面向切面編程(AOP)框架mtMessing模塊為STOMPWebSocket子協(xié)議的使用。它也支持一個(gè)注解WebSocket客戶端的STOMP信息。測(cè)試JUnitTestNGSpring3本將指導(dǎo)你如何準(zhǔn)備開發(fā)環(huán)境來(lái)使用Spring框架開始你的工作。本還將教你在安裝Spring框架之前如何在你的機(jī)器上安裝JDK,TomcatEclipse。第1步:安裝Java開發(fā)工具包你可以從Oracle的JavaJavaSEDownloads wnlods/inde.html)SDK的版本。你會(huì)在的文件中找到教你如何安裝JDK的說明,按照給出的說明安裝和配置JDK的設(shè)置。最后,設(shè)置PATHJAVA_HOME環(huán)境變量,引入包含java和javac的目oset1_WindwsXP/7/8PATHOK在nix(olaris、Linux等等)上,如果在/usr/local/jd6.0_15上安裝SDK,并且使用Cs命令,你將把下面的內(nèi)容添加到.cshrc文件中。usol/jdk160_1/bn:HsetenvJAVA_HOME/usr/loca/d1.6.0_15或者,如果你使用集成開發(fā)環(huán)境(IDE),如Borlandu,nliJIDEA或者SunONEStudio,IDEJava,IDE給定的文檔做正確的設(shè)第2步:安裝ApacheCommonsLogging /logging/ApacheCommonsLoggingAPI的版本。一旦你完安裝包,并且解壓二進(jìn)制的版本到一個(gè)方便的位置。例如在windows上的C:\commons-logging-1.1.1中,或在Linux/Unix上的 mons-logging-1.1.1中。該 上正確的設(shè)置CLASSPATH變量,否則你將會(huì)在運(yùn)行應(yīng)用程序時(shí)遇到問題3步:安裝Eclipse為了安裝EclipseIDE,從上的Eclipse二進(jìn)制文件。一旦你下載完安裝包,并且解壓二進(jìn)制的版本到一個(gè)方便的位置。例如在windows上的C:\eclipse中,或在Linux/Unix上的/ur/lcl/eclipe中,最后恰當(dāng)?shù)脑O(shè)置PATH變量。在Windows機(jī)器上,可以通過執(zhí)行以下命令啟動(dòng)Elipse,或者可以簡(jiǎn)單地雙擊elipse.exeus/oclecsecse第4Spring現(xiàn)在如果一切正常,你就可以繼續(xù)設(shè)置你的Spring框架。下面是在你的機(jī)器上并安裝框架的簡(jiǎn)單步驟選擇是要在Windows還是在UIX上安裝pring,然后繼續(xù)進(jìn)行下一個(gè)步驟,在Windows上文件,而在Unix上.tz文件從版本的Spring框架的二進(jìn)制在寫本的時(shí)候,我在我的Windows機(jī)器上了spring-framework-4.1.6.RELEASE-dist.zi 結(jié)構(gòu)為:\ring,如下所示。 E:\spring\libs中發(fā)現(xiàn)所有的Spring庫(kù)。確保你在這個(gè) 上正確的設(shè)置CLASSPATH變量,否則你將會(huì)在運(yùn)行應(yīng)用程序時(shí)遇到問題。如果使用的是s就不需要設(shè)置CLASSPATH,因?yàn)樗械脑O(shè)置將EclipseSprng4oWorld讓我們使用Spring框架開始實(shí)際的編程。在你開始使用Spring框架編寫第一個(gè)例子之前,你必須確保已經(jīng)正確地設(shè)置了Spring環(huán)境,正如在Spring——環(huán)境設(shè)置()中如所說的。假設(shè)你有了解一些有關(guān)EclipseIDE工SpringSpringBeans“oWorl!”或其他信息。第1步:創(chuàng)建JavaEclipseIDEJavaFile->New->Project,最后從向?qū)Я斜碇羞x擇JavaProject向?qū)А,F(xiàn)在,使用向?qū)Т翱趯⒛愕捻?xiàng)目命名為oSpring,如下所示:ProjectExplorer第2第二步讓我們添加Spring框架和通用的日志API庫(kù)到我們的項(xiàng)目中。為了做到這個(gè),在你的項(xiàng)目名稱oSpring上單擊右鍵,然后在快捷菜單上按照下面可用的選項(xiàng):BuidPath->ConfigureBuildPathJava現(xiàn)在,在Libraries中使用可用的AddExternalJARs按鈕,添加從Spring框架和通用日志安裝 的JAR文件:spring-aop-44LEspring-beans-44.6RLAEspring-core-46.EESE.16.LAEspring-instrument-spring-jdbc-4..EESEspring-jms-4LEspring-orm-spring-test-spring-tx-46.EESEspring-web-46gwebmvc-n4.AE第3 包。為了做到這個(gè),在packageexplore區(qū)域中的src上點(diǎn)擊右鍵,并按照選項(xiàng):New->Package。o publicclass oWorld{privaterpublicvoida(tmessage){a=message;}publicvoidSystem.out.println("YourMessage:"+}}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidman(Sring[]{AplicationContextcontextnewaoWorldobj=oWorld)}}}第一步是我們使用框架APIClassPathXmlApplicationContext()來(lái)創(chuàng)建應(yīng)用程序的上下文。這個(gè)API加beansAPIb**getBean()**beanbeanID第4步:創(chuàng)建bean你需要?jiǎng)?chuàng)建一個(gè)Bean的配置文件,該文件是一個(gè)XML文件,并且作為粘合bean的粘合劑即類。這個(gè)文件需要在src ens.lCLSSATHMainApp.javaBeans.ml用于給不同的ean分配唯一的DSpring“message”oWorld.java和MainApp.java文件。讓們來(lái)看看它是如何工作的:<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<bean ool"cass=cotrant. <propertysae oWor>當(dāng)Spring應(yīng)用程序被加載到內(nèi)存中時(shí),框架利用了上面的配置文件來(lái)創(chuàng)建所有已經(jīng)定義的beans,并且按照標(biāo)簽的定義為它們分配一個(gè)唯一的I。你可以使用來(lái)傳遞在創(chuàng)建對(duì)象時(shí)使用不同變量的值。第5一旦你完成了創(chuàng)建源代碼和bean的配置文件后,準(zhǔn)備好下一步編譯和運(yùn)行你的程序。為了做到這個(gè),請(qǐng)保持ainApp.Java文件是有效的,并且在EclipseIDE中使用可用的Run選項(xiàng),或使用Ctrl+F11編譯并運(yùn)行你的應(yīng)用程序MainApp。如果你的應(yīng)用程序一切都正常,將在EclipseIDE控制臺(tái)打印以下信息:YourYourMessage oSpring應(yīng)用程序的靈活性。下一步,我們開始在接下來(lái)的幾個(gè)章節(jié)中做一些更有趣的事5IoC容器Spring容器是Spring框架的。容器將創(chuàng)建對(duì)象,把它們連接在一起,配置它們,并管理他們的整個(gè)生命周期從創(chuàng)建到銷毀。Sprng容器使用依賴注入(DI)SpringBe通過閱讀配置元數(shù)據(jù)提供的指令,容器知道對(duì)哪些對(duì)象進(jìn)行實(shí)例化,配置和組裝。配置元數(shù)據(jù)可以通過XML,JavaJavaSpringSpringICJavaPOJO序11neDIp.ctory.BeanFactory接口來(lái)定義。BeanFactoryBeanFactorye,ntalizngBean,DisposabeBean,在png中仍然存在具有大量的與ping整合的第框架的反向兼容性的目的。2SpringApplicationContextioc-otiner/sprin-applicationcontext-e力,發(fā)布應(yīng)用程序給感的器的能力。該容器是由atcx接口定義。eBeanFactoryBeanFactory。BeanFactory仍然可以用于輕量級(jí)的應(yīng)用程序,如移動(dòng)設(shè)備或基于applet的應(yīng)用程序,其中它的數(shù)據(jù)量和速度是顯著。S的BeanFactory容這是一個(gè)最簡(jiǎn)單的容器,它主要的功能是為依賴注入(DI)提供支持,這個(gè)容器接口在org.springframework.beas.factry.eaFacor中被定義。BeanFactoryBeanFactoryAware、DisposableBean、InitializingBea,SpringSpring整合在SpringBeanFactoryXmlBeanFactory類。這個(gè)容器從一個(gè)XML文件中配置元數(shù)據(jù),由這些元數(shù)據(jù)來(lái)生成一個(gè)被配置化的系統(tǒng)或者應(yīng)用。appletBeanFactoryAplicationContext,除非你有更好的理由選擇BeanFactory。EclipseIDE,Spring步1Sp1SpingEamplesrccom.tutorialspoint2點(diǎn)擊右鍵,選擇AddExternalJARs選項(xiàng),導(dǎo)入Spring的庫(kù)文件,正如我們?cè)赟pringoWorldExample章節(jié)中提到的導(dǎo)入方式。3在i文件夾下創(chuàng)建oWorld.java和MinApp.java兩個(gè)類文件4srcBeanl5最后的步驟是創(chuàng)建所有Java文件和Bean oWorld.java的內(nèi)容publicclass oWorld{privaterpublicvoida(tmessage){a=message;}publicvoidSystem.out.println("YourMessage:"+}}MainApp.javapackagepackageomrapnt;importrneaimportpetimportpecasathepubicclassApublicstaticvoidmai(Sring[]args)XmleaFactryfactory=newXmlBenFactry(newsRsuoWorldobj=oWorld)}}XmlBeanFactory()APIbeanClassPathResource()APICLASSPATHbeanXmlBeanFactory()API對(duì)象,即在配置文件中提到的bean。第二步利用第一步生成的bean工廠對(duì)象的getBean()方法得到所需要的beanBeans.xml<?xm<?xml<beansxmlns="mns"encoding="UT-""ishaLocat"<bean ool"cass=cotrant. <propertysae oWor>YourMessageoW!ApplicationContext是spring中較高級(jí)的容器。和BeanFactory類似,它可以加載配置文件中定義的bean,beanbean文件從解析文本信息和將傳遞給所指定的器。這個(gè)容器在org.spingframeokcotet.AplicationContextinterface接口中定義。x包含BeanFactory所有的功能,一般情況下,相對(duì)于BeanFactory,Applicationotext會(huì)被推薦使用。BeanFactoryappletAplicationContextFileSystemXmlApplicationContext:該容器從XML文件中加載已被定義的bean。在這里,你需要提供給構(gòu)造器XML文件的完整路徑ClassPathXmlApplicationContext:該容器從XML文件中加載已被定義的beanXMLCLASSPATHCLASSPATH中bean配置文件。WebXmlApplicationContext:該容器會(huì)在一個(gè)web應(yīng)用程序的范圍內(nèi)加載在XML文件中已被定義的be我們已經(jīng)在SpringoWrldExample章節(jié)中看到過ClassPathXmlAplicationContext容器,并且,在基于spring的webXmlWebpplicatinContext。所以,接下來(lái),讓我們看一個(gè)關(guān)于FleytmXlApplicationContxtEclipseIDE,Spring步1Sp1SpingEamplesrcn的文件夾2點(diǎn)擊右鍵,選擇AddExternalJARs選項(xiàng),導(dǎo)入Spring的庫(kù)文件,正如我們?cè)赟pringoWorldExample章節(jié)中提到的導(dǎo)入方式。3在i文件夾下創(chuàng)建oWorld.java和MinApp.java兩個(gè)類文件4文件夾下創(chuàng)建Bean的配置文件ens.xml5最后的步驟是編輯所有JAVA文件的內(nèi)容和Bean oWorld.java的內(nèi)容publicclass oWorld{privaterpublicvoida(tmessage){a=message;}publicvoidSystem.out.println("YourMessage:"+}}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;import.tppubicclassnp{publicstaticvoidmai(Sring[]args)AplicationContextcontext=newFileSystemXmlApplicaonCotxt(C/r/ZARk/ opngrB.l");oWorldobj=oWorld)}}第一步生成工廠對(duì)象。加載完指定路徑下bean配置文件后,利用框架提供的FileSystemXmlApplicationContextAPI去生成工廠bean。FileSystemXmlApplicationContext負(fù)責(zé)生成和初始化所有的對(duì)象,比如,所有在XMLbean配置文件中的bean。getBean()beanbeanID來(lái)返回一個(gè)真正的對(duì)象。一旦得到這個(gè)對(duì)象,就可以利用這個(gè)對(duì)象來(lái)調(diào)用任何方法。Beans.xml<?xm<?xml<beansxmlns="mns"encoding="UT-""ishaLocat"<bean ool"cass=cotrant. <propertysae oWor>YourMessageoW!6Bean定義beanSpringIoC容器管理的。beanSpringIoCbean在XML的表單中的定義。beanbeanbean的依賴關(guān)系上述所有的配置元數(shù)據(jù)轉(zhuǎn)換成一組構(gòu)成每個(gè)bean屬 描這個(gè)屬性是強(qiáng)制性的,并且指定用來(lái)創(chuàng)建bean的bean這個(gè)屬性指定唯一的bean標(biāo)識(shí)符。在基于XMLIDnamebeanbeanbeanconstructor-prteslazy-iniializationbeanoC容器在它第一次被請(qǐng)求時(shí),而不是在啟動(dòng)時(shí)去創(chuàng)建一個(gè)bean實(shí)例。obeanbeanbeanbean你已經(jīng)看到了如何把基于XMLML個(gè)配置文件中有不同的ean<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<!--Asimebeanefnin--<beanid="..."<!--cllabratorsandconfigurationforthisbeangohere--<!--Abeandeinitionwithlazyinitseton--<beani="..."class="..."lay-<!--cllabratorsandconfigurationforthisbeangohere--<!--Abeandefinitionwithimethod--<beanid="..."class="..."init-ehd...><!--cllabratorsandconfigurationforthisbeangohere--<!--Abeandeinitionwithdestructionmethod--<!--cllabratorsandconfigurationforthisbeangohere--<!--morebeanefnitiosgohere--你可以查看SpringoWorld實(shí)例()來(lái)理解如何定義,配置和創(chuàng)建SpringBeansSpring依賴注入編程之前,能掌握一些其他重要的Spring概念。7Bean當(dāng)在Spring中定義一個(gè)時(shí),你必須該bean的作用域的選項(xiàng)。例如,為了強(qiáng)制Spring在每次需要時(shí)都產(chǎn)生一個(gè)新的bean實(shí)例,你應(yīng)該bean的作用域的屬性為prototype。同理,如果你想讓Spring在每次需要時(shí)都返回同一個(gè)bean實(shí)例,你應(yīng)該bean的作用域的屬性為singleton。作用 描該作用域?qū)我籦eanntext的上下文中有效。beanHTTPweb-awareSpringAnContext本章將討論前兩個(gè)范圍,當(dāng)討論有關(guān)web-awarepringt時(shí),其余三個(gè)將被討論singleton,SpringIoCbean在這種單例bean的高速緩存中,以及針對(duì)該bean的所有后續(xù)的請(qǐng)求和都返回緩存對(duì)象。singletonbeanbean域的屬性為singleton,如下所示:<!--<!--Abeandeinitionwithsingletonscope--<beani="..."class="..."<!--cllabratorsandconfigurationforthisbeangohere--EclipseIDE,Spring步1Sp1SpingExmplesrccom.tutorialspoi2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),在SpringoWorldExample章節(jié)解釋3在com.tutorialspoint包中創(chuàng)建Java類World和MainAp4srcBeansBn.xml5最后一步是創(chuàng)建的所有Java文件和Bean這里這里 packagecom.tutorialspoint;publicclass oWorld{privateStringpublicvoidsetMessage(Stringmessage){this.message=message;}publicvoidSystem.out.println("YourMessage:"+}}MainApp.javapackagepackageimport publicclassMainApp{publicstaticvoidmain(String[]args)ApplicationContextcontext=newClassPathXmlApplicationContext("Beans.xml");oWorldobjA=( oWorld)context.getBean(" objA.setMessage("I'mobjectoWorldobjB=oWorld)}}下面是singleton作用域必需的配置文件<?xml<?xmlversion="1.0"encoding="UTF-<beansxmlns="""<bean oWorld" YourYourMessage:I'mobjectAYourMessage:I'mobjectprototypebeanSpringIoCBean例。一般說來(lái),滿狀態(tài)的bean使用prototype作用域和沒有狀態(tài)的bean使用singleton作用域。prototypebeanprototype<!--<!--Abeandeinitionwithsingletonscope--<beand="..."class="..."<!--cllabratorsandconfigurationforthisbeangohere--EclipseIDE,Spring步1Sp1SpingExmplesrc文件夾中創(chuàng)建一個(gè)包o2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)3在com.tutorialspoint包中創(chuàng)建Java類World和MainAp4在src文件夾中創(chuàng)建Beans配置文件eas.xml5最后一步是創(chuàng)建的所有Java文件和Bean packagecotrant;pubic {tStringpublicvoida(tmessage){a=message;}publpublicvoidSystem.out.println("YourMessage:"+}}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidmai(Sring[]args)AplicationContextcontext=newttBn.oWorldobjA=( oWorld)context.getBean(" WbA.etessae(mobjectoWorldobjB=oWorld)W}}sm:<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<bean oWorld" o一旦你創(chuàng)建源代碼和BeanYourYourMessage:I'mobjectAYourMessage:null8Bean理解Springbean的生命周期很容易。當(dāng)一個(gè)bean被實(shí)例化時(shí),它可能需要執(zhí)行一些初始化使它轉(zhuǎn)換成可用狀態(tài)。同樣,當(dāng)bean不再需要,并且從容器中移除時(shí),可能需要做一些清除工作。盡管還有一些在Beanbean為了定義安裝和拆卸一個(gè)bean,我們只要帶有init-method和/或destroy-method參數(shù)的。init-method屬性指定一個(gè)方法,在實(shí)例化bean時(shí),立即調(diào)用該方法。同樣,destroy-method指定一個(gè)方法,只有從容器中移除bean之后,才能調(diào)用該方法。org.pringfrmework.beans.actory.InitializingBeanpubpubicclassExampleBeanimplementsge{lcvoidafterPrpertiesSet()//dosomeaz}}XMLinit-methodvoid =xclass="exmple.EamleBean"init-dipubpubicclassblc//dosomeaz}}oapubpubicclassExampleBeanimplementsoe{publicvoiddestroy()//dosomedestruction}}XMLdestroy-methodvoid<bean<beandexpeBn"clas="exaple.xapleBean"destroy-pubpubicclass{publicvoiddestroy()//dosomedestruction}}如果你在非web應(yīng)用程序環(huán)境中使用Spring的IoC容器;例如在豐富的客戶端桌面環(huán)境中;那么在JVM中你要關(guān)閉hook。這樣做可以確保正常關(guān)閉,為了讓所有的資源都被釋放,可以在單個(gè)beans上調(diào)用destroy方建議你不要使用IntialiingBean或者bBa的回調(diào)方法,因?yàn)閄ML配置在命名方法上提供了極大EclipseIDE,Spring步 描1SpingExmple的項(xiàng)目,并且在創(chuàng)建項(xiàng)目的src文件夾中創(chuàng)建一個(gè)包2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)3在com.tutorialspoint包中創(chuàng)建Java類World和MainAp4在src文件夾中創(chuàng)建Beans配置文件Ben.xml5最后一步是創(chuàng)建的所有Java文件和Bean下面是下面是MainApp.java文件的內(nèi)容。在這里,你需 一個(gè)nx packageomrapnt;pubic {iSpublicvoida(tmessage){this.message=message;}publicvoidSystem.out.println("YourMessage:"+}publicvoidSystem.out.println("Benisgoingthrough}publicteotprntn("endestroynow.");}hookregisterShutdownHook()方法。它將確保正常關(guān)閉,并且調(diào)用相關(guān)的destroy方法。packagepackagecotrant;importaximportr.prnpubicclassnppublicstaticvoidmai(Sring[]args)ApplicationContetcontext=newx"aoWorldobj=oWorld)}}<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<bean assotoalpnt. oolinit-oit destroy-edeto><property<propertysae oWor>BeanBeanisgoingthroughinit.YourMessage:oorBeanwilldestroynow.如果你有太多具有相同名稱的初始化或者銷毀方法的Bean,那么你不需要在每一個(gè)bean上初始化方法和銷毀方法default-init-methoddefault-destroy-method屬性提供了靈活地配置這種情<beans<beansmns"ishaLocat""""<beanid="..."<!--cllabratorsandconfigurationforthisbeangohere--9Spring——Bean后置處理器BeanPostProcessor接口定義回調(diào)方法,你可以實(shí)現(xiàn)該方法來(lái)提供自己的實(shí)例化邏輯,依賴解析邏輯等。你也SpringBeanPostProcessorbean你可以配置多個(gè)BeanPostProcessor接口,通過設(shè)置BeanPostProcessor實(shí)現(xiàn)的Ordered接口提供的order屬性來(lái)控制這些BeanPostProcessor接口的執(zhí)行順序。BeanPostProcessorbean(或?qū)ο螅㏒pringIoCbeanBeanPostProcessorApplicationContext會(huì)自動(dòng)檢測(cè)由BeanPostProcessor接口的實(shí)現(xiàn)定義的bean,這些bean為后置處理器,然后通過在容器中創(chuàng)建bean,在適當(dāng)?shù)臅r(shí)候調(diào)用它。x我們?cè)谶m當(dāng)?shù)奈恢檬褂肊clipseESpring應(yīng)用程序:步1Sp1SpingExmplesrccom.tutorialspoi2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)3在com.tutorialspoint包中創(chuàng)建Java類oWorld、 World和MainAp4在src文件夾中創(chuàng)建Beans配置文件Ben.xml5最后一步是創(chuàng)建的所有Java文件和Bean orld.java**文件的內(nèi)容publicclass oWorld{privaterpublicvoida(tmessage){a=message;}publicvoidSystem.out.println("YourMessage:"+}publicvoidSystem.out.println("Benisgoingthrough}publpublicteotprntn("endestroynow.");}這是實(shí)現(xiàn)BeanPostProcessor的非常簡(jiǎn)單的例子,它在任何bean的初始化的之前和之后輸入該bean的名稱。你可以在初始化bean的之前和之后實(shí)現(xiàn)更復(fù)雜的邏輯,因?yàn)槟阌袃蓚€(gè)內(nèi)置bean對(duì)象的后置處理程序 下面是MainApp.java文件的內(nèi)容。在這里,你需 一個(gè)nx packagecotrant;importsnwonoimportrka pubicclass oWorldimplementsBeanPostProcessorpublicObjectpostProcsBeoreInitialization(Objectbean,StringbeanName)throws {ystem.utprintln("BeforeInitilization:"+beanName);returnbean;//youcanreturnanyotherobjectasl}publicObjectostrocessAftrInitialization(bjctbean,StringbeanName)throws {l:"+beanName);returnbean;//youcanreturnanyotherobjectasl}}hookregisterShutdownHook()方法。它將確保正常關(guān)閉,并且調(diào)用相關(guān)的destroy方法。packagepackagecotrant;importaximportr.prnpubicclassnppublicstaticvoidmai(Sring[]args)ApplicationContetcontext=newx"aoWorldobj=oWorld)}}<?xm<?xmlversion="1.0"encoding="UT-<beansmns""ns"i:ceaLocan""<bean oWorld"t Winitdndestroy-hd<propertysae oWor><beano oWorld"ao:lBeanisgoingthroughinit.enao:oWorldYourMessage:orBeanwilldestroynow.Bean子beanSpringBeanJavabean為模板和其他子bean就可以從父bean中繼承所需的配置。當(dāng)你使用基于XML的配置元數(shù)據(jù)時(shí),通過使用父屬性,指定父bean作為該屬性的值來(lái)表明子beanEclipseIDE,Spring步 描1SpingExmple的項(xiàng)目,并且在創(chuàng)建項(xiàng)目的src文件夾中創(chuàng)建一個(gè)包2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)3在com.tutorialspoint包中創(chuàng)建Java World、 和Mainpp4在src文件夾中創(chuàng)建Beans配置文件Ben.xml5最后一步是創(chuàng)建的所有Java文件和Bean下面是配置文件Beans.xml,在該配置文件中我們定義有兩個(gè)屬性message1和message2的“oWorld”bean。然后,使用parent屬性把“o”bean定義為“oWorld”beanbean繼承message2的屬性,重寫message1的屬性,并且引入一個(gè)屬性message3。<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<bean ool"cass=cotrant. <propertysg1 oWor><propertyname="message" oSecondWorl><bean"o" <propertymsag1 <propertyname="messag3"e oo .javapublicclass oWorld{vrmessage1;privateStringmessage2;publicvoid1imessage){this.message1=message;}blcvoidsetessage2(Strngmessage){sg=message;}publicvoidSystem.out.println("WrldMessage1:"+}publicvoidSystem.out.println("WrldMessage2:"+}}packagecotrant;publico{privateStringatmessage2;privatetmessage3;publicvoid1imessage){this.message1=}blcvoidmessage){sg=}blcvoidmessage){g=}publicvoidinMessage1:"+}publicvoidin Message2:"+}publicvoidin Message3:"+}}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext; tex.supportassPaXAppctnCtt;pubicclassApublicstaticvoidmai(Sring[]args)AplicationContextcontext=newttBnoWorldobjA= oWorld) WoobjB= ) }}WWoldMessage1WorldMessage2Message1:Message2Secondro!oSecondWrMessage3: 在這里你可以觀察到,我們創(chuàng)建“o”bean的同時(shí)并沒有傳遞message2,但是由于Bean定義的繼承,所以它傳遞了message2。Bean定義模板你可以創(chuàng)建一個(gè)Bean定義模板,不需要花太多功夫它就可以被其他子bean定義使用。在定義一個(gè)Bean定義模板時(shí),你不應(yīng)該指定類的屬性,而應(yīng)該指定帶true值的抽象屬性,如下所示:<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<beanbn <propertysg1 oWor><propertyname="message" oSecondWorl><propertyname="messag3"e <bean"ur"entbeaeam<propertymsag1 <propertyname="messag3"e oo作為一個(gè)純粹的模板bean定義來(lái)使用的,充當(dāng)子定義的父定義使用。每個(gè)基于應(yīng)用程序的aa一個(gè)復(fù)雜的JavaJava或有時(shí)稱為布線)publpublicclassTextEditorapcrpublicTextEditor(){spellChecker=newke}}TextEditorpelChecker之間的依賴關(guān)系。在控制反轉(zhuǎn)的場(chǎng)景中,我們反publpublicclassTextEditorapcrpublicTextEditor(){spellChecker=newke}}在這里,TextEditorSelChecker的實(shí)現(xiàn)。SpellCecerTextEditor例化的時(shí)候?qū)⑻峁┙oTextEditor,整個(gè)過程是由Spring框架的控制。TextEditor(XML),且依賴關(guān)系(即SelChecker類)通過類構(gòu)造函數(shù)被注入到TextEditor類中。因此,控制流通過依賴注入(DI)已依賴注入的第二種方法是通過TextEditor類的Setter方法,創(chuàng)建pllChecker實(shí)例,該實(shí)例將被用于調(diào)用setter方法來(lái)初始化TextEditor的屬性。序11jctmd)依賴關(guān)系的setter是一個(gè)好的做法。知道依賴關(guān)系的位置或類,而這一切都由Spring框架控制的。下面的例子顯示了一個(gè)類TextEditor,只能用構(gòu)造函數(shù)注入來(lái)實(shí)現(xiàn)依賴注入。步1創(chuàng)建一個(gè)名為Spri1創(chuàng)建一個(gè)名為SprigExmple的項(xiàng)目,并在創(chuàng)建的項(xiàng)目中的src文件夾下創(chuàng)建包。2使用AddExternalJARs選項(xiàng)添加必需的Spring庫(kù),解釋見SpringoWorldExample3在com.tutorialspoint包下創(chuàng)建Java類TextEdior,SpellChecker和MainAp4在srcBeans的配置文件ens.xml5最后一步是創(chuàng)建所有Java文件和BeanTextEditor.javapublicclassTextEditor{aSkpublicxocthis.spellChecker=r}publicvoid{heckcSellng);}}下面是另一個(gè)依賴類文件SpellChecker.javapackagepackagecom.uorialspint;publicclassSpelCheckerpublicheSystem.out.println("Insideekconstructor."}publpublicvoid.);}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidman(Sring[]{AplicationContextcontextnewClassPahmlAppictionContext("Beans.xml");spllhe(;}}Beans.xml<?xmlversion="1.0"encoding="UT-<beans"mns""ishaLocat"<beantasso.ttapntextEdt><constructor-arge"spelhece><!--DefinitionforspellCheckrbean--<beanslsIInsideSkconstructor.InsideTextEditorconstructor.Insideckelng.beanpackagex.y;packagex.y;publicFoo(Barbar,Bazbaz)//}}<beanid="foo"ass"xyFo><constructor-arg<constructor-arge<beanid="bar"assx..ar><beanid="baz"lass"ya>packagepackagex.y;publicFoo(intyear,Stringname)//}}type<bean"asseesmpeBean>aue201><constructor-argtype"jav.lang.String"aueaa>索引為0的例子,如下所示:<bean"asseesmpeBean><constructor-argndex=0"a<constructor-argindex="1"aueaa">使用如上所示的value屬性。factory方法來(lái)初始化你的bean后,通過容器在你的讓我們用EclipseIDE適當(dāng)?shù)毓ぷ?,并按照以下步驟創(chuàng)建一個(gè)Spring應(yīng)用程序。步1創(chuàng)建一個(gè)名為Spri1創(chuàng)建一個(gè)名為SprigExmple的項(xiàng)目,并在創(chuàng)建的項(xiàng)目中的src文件夾下創(chuàng)建包。2使用AddExternalJARs選項(xiàng)添加必需的Spring庫(kù),解釋見SpringoWorldExample3在com.tutorialspoint包下創(chuàng)建Java類TextEdior,SpellChecker和MainAp4在srcBeans的配置文件ens.xml5最后一步是創(chuàng)建所有Java文件和BeanTextEditor.javapublicclassTextEditor{aSk.publicvoidhekrSpChce.this.spellChecker=r}//agettermethodtoreturnspelheerpublicegetSpellChecker()hecke;}publicvoid{heckcSellng);}}spellCheckersetSpellChecker()方法,該方法與JavaPOJO類非常相似。讓我們創(chuàng)建另一個(gè)依賴類文件SpellChecker.java的內(nèi)容:publicclassSpelCheckerpublicheSystem.out.println("Insideekconstructor."}publicvoid.);}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidman(Sring[]{AplicationContextcontextnewClassPahmlAppictionContext("Beans.xml");spllhe(;}}Beans.xml<?xmlversion="1.0"encoding="UT-<beans"mns""ishaLocat"<beantasso.ttapntextEdt><propertynae=spelheke"espelheke><!--DefinitionforspellCheckrbean--<beansls函數(shù)注入中,我們使用的是中的元素,而在基于設(shè)值函數(shù)的注入中,我們使用的是中的元素。直接傳遞一個(gè)值,那么你應(yīng)該使用value屬性。IInsideSkconstructor.InsidesetSelCheckr.Insideckelng.p-namespaceXMLXMLp-namespace是非常方便的。讓我們查看一下區(qū)以帶有的標(biāo)準(zhǔn)XML配置文件為例<?xmlversion="1.0"encoding="UT-<beans"mns""ishaLocat"<beanjnclassic"asscmexape<propertyevalue="John<propertyu<beaneass=cmexame<propertyevalue="John上述XML配置文件可以使用p-namespace<?xmlversion="1.0"encoding="UT-<beans"mns"""ishaLocat"<beanoclassic"sea."p:name="JonDoe"p:spouse-e<beanjelsx."p:name="JonDoe"/>在這里,你不應(yīng)該區(qū)別指定始值和帶有p-namespace的對(duì)象。ref分表這不一個(gè)接的,而是對(duì)另一個(gè)ben的 。注入內(nèi)部Javainnerbeansbean的bean。因此在或元素內(nèi)元素被稱為內(nèi)部bean,如下所示。<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<beand<propertye<beanid="innerBean"EclipseIDE,Spring步11SpingExmplesrcomtutrialspoint。2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)。optionasexinedinthechapter.3在com.tutorialspoint包中創(chuàng)建Java類TextEditor、SelChecker和MainApp4在src文件夾中創(chuàng)建Beans配置文件Ben.xml5TextEditor.javapublicclassTextEditor{aSk.publicvoidhekrSpChce.this.spellChecker=r}//agettermethodtoreturnpelheerpublpublice{return}publicvoid{heckcSellng);}}下面是另一個(gè)依賴的類文件SpellChecker.javapackagepackagecom.uorialspint;publicclassSpelCheckerpublicheSystem.out.println("Insideekconstructor."}publiccpSystem.ouprintln("Inside.);}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidmai(Sring[]args)AplicationContextcontext=newttBn.TextEditorte=(TextEditor)context.getBean("textEditor");}}<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<beantasso.ttapntextEdt><propertyespelhec><beanslcass=cotrant.plhecke>IInsideSkconstructor.InsidesetSelCheckr.Insideckelng.你已經(jīng)看到了如何使用value屬性來(lái)配置基本數(shù)據(jù)類型和在你的bean配置文件中使用的ref屬性來(lái)配置對(duì)象。這兩種情況下處理奇異值傳遞給一個(gè)bean。JavaColletionList、Set、MapProperties,應(yīng)該怎么做呢。為了處理這種情況,Spring元 描t你會(huì)遇到兩種情況(a)傳遞集合中直接的值(b)傳遞一個(gè)bean的作為集合的元素EclipseIDE,Spring步驟描述1SpingExmple的項(xiàng)目,并且在創(chuàng)建項(xiàng)目的src文件夾中創(chuàng)建一個(gè)包t2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),解釋見SpringoWorldExample章節(jié)。optionasexinedinthechapter.3在com.tutorialspoint包中創(chuàng)建Java類TextEditor、SelChecker和MainApp4在src文件夾中創(chuàng)建Beans配置文件Ben.xml5JavaCollection.javampotjava.util.*;publicclass{ListaddressList;SetaddressSet;MapaddressMap;ei{this.addressList=}////nandreturnsalltheelementsofthelist.publicListgetAddressList(){sreturnaddressList;}publicvoidsetAddressSet(Set{this.addressSet=}ntspublicSetgetAddressSet(){Se.outntn(StElements:"+addressSet);returnaddressSet;}publicvoidsetAddressMap(Map{this.addressMap=}//tandreturnsalltheelementsoftheMap.publicMapgetAddressMap(){System.otprinln("MapElements:"+addressMap);returnaddressMap;}publicvoidsetAddressrp(roperties{this.addressProp=}publicrrgetAddressProp(){Se.outntn(PoetyElements:"+addressProp);returnaddressProp;}}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidman(Sring[]{AplicationContextcontextnewt"noten(}}Beans.xml<?xmlversion="1.0"encoding="UT-<beans mns" ishaLocat"<!--DefinitionforjavCollection--<beanoassotoalpntaolectn><!--resultsnaAdessLaautlLs)call--<propertye <!--resultsinaseAdresSet(java.util.Set)call--<propertyd <!--resultsinadrucall--<propertyd <entrykey="2"auePaktn><entrykey="3"e<entrykey="4"ae<!--<!--resultsinaseAdressrop(jaa.util.Properties)call--<propertyd<prop <prop<propey"eeU<p<propListElements:[ ,ListElements:[ ,Pakistan,USA,USA]SetElements:[ ,Pakistan,USA]MapElements ,2=Pakistan,3=USA,PropertyElements:{two=Pakistan, ,three=USA,ou=S}注入下面的Bean定義將幫助你理解如何注入bean的作為集合的元素。甚至你可以將和值混合在一起,如<?xm<?xmlversion="1.0"encoding="UT-<beansmns"ishaLocat"""<!--BeanDefinitiontohandlereferencesandvalues--<beanid="..."<!--Passingbeanreferenceforjava.util.List--<propertyeeanaddes1>anaddess><!--Passingbeanreferenceforjva.util.Set--<propertydeanaddes1>anaddess><!--Passingbeanreferenceforu--<propertyd<entrykey="one" <entrykey="two"value-e <bean<beand="..."<property "aue>前面的例子相當(dāng)于Java代碼:exampleBean.set 如果你需要傳遞一個(gè)NULL值,那么你可以傳遞它,如下所示:<bean<beand="..."<propertye "><nul/pet> (null)Beans你已經(jīng)學(xué)會(huì)如何使用元素來(lái)bean和通過使用XML配置文件中的和元素來(lái)注入于Spring的應(yīng)用程序的XML配置的數(shù)量。Spring模 描byName(beans-auto-ng/spng-atwnbae由屬性名自動(dòng)裝配。Spring容器看到在XML配置文件中bean的自動(dòng)裝配的屬性設(shè)置為byName。然后嘗試匹配,并且將它的屬性與在配置文件中被定義為相同名稱beansrngrng-auwn由屬性數(shù)據(jù)類型自動(dòng)裝配。Spring容器看到在XMLbean的屬性設(shè)置為byTypebean名bean,則一個(gè)致命的異常將會(huì)被拋出。constructor(beans-autngntuctom數(shù)參數(shù)類型的bean,則一個(gè)致命錯(cuò)誤將會(huì)發(fā)生。嘗試通過byType來(lái)自動(dòng)裝配。byTypeconstructor當(dāng)自動(dòng)裝配始終在同一個(gè)項(xiàng)目中使用時(shí),它的效果最好。如果通常不使用自動(dòng)裝配,它可能會(huì)使開發(fā)人員的使用它來(lái)連接只有一個(gè)或兩個(gè)bean定義。不過,自動(dòng)裝配可以顯著減少需要指定的屬性或構(gòu)造器參數(shù),但你應(yīng)限 描Spring這種模式由屬性名稱指定自動(dòng)裝配。Sring容器看作beans,在XML配置文件中beans的auto-wire屬性設(shè)置為byName。然后,它嘗試將它的屬性與配置文件中定義為相同名稱的beans進(jìn)行匹配和連接。如果找到匹例如,在配置文件中,如果一個(gè)bean定義設(shè)置為自動(dòng)裝配byName,并且它包含spellChecker屬性(即,它setSpellChecer(...)方法)SpringspellCheckerbean,并且用它來(lái)設(shè)置這個(gè)屬性。你仍然可以使用<property>連接其余的屬性。下面的例子將說明這個(gè)概念。EclipseIDE,Spring步1Sp1SpingExmplesrccm.ttrial2使用AddExternalJARs選項(xiàng),添加所需的Spring庫(kù),在SpringoWorldExample章節(jié)中已說3在com.tutorialspoint包中創(chuàng)建JavaTextEdtor,SpellChecker和MainApp4在src文件夾中創(chuàng)建Beans的配置文件Bas.xml5最后一步是創(chuàng)建所有Java文件和BeanTextEditor.javapublicclassTextEditor{vpervSname;publicvoidtlSpellCheckerspellChecker){this.spellChecker=k}publicpk{returnr}publicvoide{=}publicr{return}publicvoid{heckcSellng);}}}下面是另一個(gè)依賴類文件SpellChecker.javapackagepackagecom.uorialspint;publicclassSpelChecker{publicp{System.out.println("Insideekconstructor."}publicvoid.);}MainApp.javapackagepackagecotrant;importg.pngaewon.plicatoContext;importr.prnpubicclassnp{publicstaticvoidman(Sring[]{AplicationContextcontextnewClassPahmlAppictionContext("Beans.xml");spllhe(;}}Beans.xml<?xmlversion="1.0"encoding="UT-<beans"mns""ishaLocat"<beantasso.ttapntextEdt><property"ere="spellChecker"<propertymmGeTextEditor"<!--DefinitionforspellCheckrbean--<beansls但是,如果你要使用自動(dòng)裝配“byName”,那么你的XML<?xmlversion="1.0"encoding="UT-<beans"ns""i:ceaLocan"sauowe"yae><propertymmGeTextEditor"<!--DefinitionforspellCheckrbean--<bea

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論