編程-Spring基礎(chǔ)_第1頁(yè)
編程-Spring基礎(chǔ)_第2頁(yè)
編程-Spring基礎(chǔ)_第3頁(yè)
編程-Spring基礎(chǔ)_第4頁(yè)
編程-Spring基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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)介

1、Spring基礎(chǔ)1.課程介紹1.為什么需要Spring ;(了解)?2.初識(shí) Spring ;(了解)?2. Spring入門;(掌握)?3. BeanFactory與 ApplicationContext的使用;(掌握)?4. Spring配置細(xì)節(jié);(掌握)?5. Spring測(cè)試;(掌握)?6. Spring依賴注入;(掌握)?7.三層架構(gòu)中Spri ng的使用;(掌握)2.為什么需要Spring開(kāi)發(fā)應(yīng)用時(shí)常見(jiàn)的問(wèn)題:一:代碼耦合高1. 應(yīng)用程序是由一組相互協(xié)作的對(duì)象組成,一個(gè)完整的應(yīng)用是由一組相互協(xié)作的對(duì)象組成。所以開(kāi)發(fā)一 個(gè)應(yīng)用除了要開(kāi)發(fā)業(yè)務(wù)邏輯之外,最多的是關(guān)注如何使這些對(duì)象協(xié)作來(lái)完

2、成所需功能,而且要低耦合、 高內(nèi)聚。業(yè)務(wù)邏輯開(kāi)發(fā)是不可避免的,那就需要有個(gè)框架出來(lái)幫我們來(lái)創(chuàng)建對(duì)象及管理這些對(duì)象之間 的依賴關(guān)系;I- ;public class EmployeeServicelmpI !i/如果接口和實(shí)現(xiàn)類在同一地方存在,那么就是高耦合。private lEmployeeDao employeeDao = new EmployeeJdbcDaolmpl();2. EmployeeService對(duì)象除了完成業(yè)務(wù)邏輯功能的實(shí)現(xiàn),還需要把數(shù)據(jù)通過(guò)EmployeeDao進(jìn)行持久化,那么EmployeeService對(duì)象就依賴于EmployeeDao ,如果 EmployeeServ

3、ice 離開(kāi)了EmployeeDao 就無(wú)法進(jìn)行工作了;問(wèn)題:若把 IEmployeeDao的實(shí)現(xiàn)改成:EmployeeHibernateDaoImpI?傳統(tǒng)解決方式:在每一個(gè)使用到IEmployeeDao 的地方,都需要修改為 newEmployeeHiber nateDaoImpI();IEmployeeDao實(shí)例對(duì)象,然后在需要用到IEmployeeDao 的地方工廠模式:通過(guò)一個(gè)工廠來(lái)創(chuàng)建管理直接通過(guò)工廠來(lái)獲?。簆erties:employeeDao = cn.itsource.dao.impI.EmployeeDaoImpI:i public class Object

4、Factorypublic static Object getObject(Stri ng n ame) n ame =employeeDaojProperties ps = new Properties。;ps.l oad(bea perties);!return Class.forName( name), newln sta nce();I i:Ipublic class AServicelmpl ;private lEmployeeDao employeeDao = ObjectFactory.getEmployeeDao();! public class BServicelm

5、pl :private lEmployeeDao employeeDao = ObjectFactory.getEmployeeDao();i二:對(duì)象之間依賴關(guān)系處理繁瑣j public class EmpployeeAction private lEmployeeService service;! public class EmpployeeServiceprivate lEmployeeDao dao;問(wèn)題:如果對(duì)象有很多,且互相存在依賴關(guān)系,并且有的對(duì)象需要單例模式,有的則需要多個(gè)實(shí)例,處理起來(lái)比較繁瑣;三:事務(wù)控制繁瑣1. 實(shí)際開(kāi)發(fā)中,某一個(gè)業(yè)務(wù)邏輯可能會(huì)牽涉多個(gè)操作(多個(gè)sql),事

6、務(wù)開(kāi)啟在service 層,是極好- AOP的。但是每個(gè)方法前都要開(kāi)啟事務(wù),每個(gè)方法后都要關(guān)閉事務(wù),這樣就會(huì)導(dǎo)致代碼臃腫,開(kāi)發(fā)效率低 下的問(wèn)題;思考:如何降低業(yè)務(wù)邏輯部分之間耦合度,提高程序的可重用性,同時(shí)提高開(kāi)發(fā)的效率!;EmployeeService:i public void save(.)!開(kāi)啟事務(wù)idao.save(.);iI關(guān)閉事務(wù)!| public void update(.)|開(kāi)啟事務(wù)dao.update(.); :i關(guān)閉事務(wù)3. 初識(shí) Spring3.1. 什么是框架1. 程序中的框架(framework )其實(shí)是一系列jar包(一系列.class 文件)的組合;2. 一個(gè)半

7、成品,不需要從零起步,提高開(kāi)發(fā)效率;3. 為了解決某一個(gè)領(lǐng)域的問(wèn)題而產(chǎn)生;4. 適用于團(tuán)隊(duì)開(kāi)發(fā),統(tǒng)一規(guī)范,方便維護(hù);3.2. 什么是 Spring1.Spring是一個(gè)開(kāi)源的輕量級(jí)控制反轉(zhuǎn)(IOC)和面向切面編程(AOP)的容器框架;(1)輕量級(jí):相對(duì)于重量級(jí)(框架設(shè)計(jì)比較繁瑣,配置較多,例如EJB ( tomcat不支持),現(xiàn)在基本不用了)而言,開(kāi)發(fā)使用都比較簡(jiǎn)單,功能強(qiáng)大;(2)IOC (Inverse of control):將創(chuàng)建對(duì)象的權(quán)利和依賴關(guān)系維護(hù)(字段賦值)交給 Spring容器(不再使用以前 new關(guān)鍵字創(chuàng)建對(duì)象);(3)AOP(Aspect Oriented Program

8、ming):將相同的邏輯抽取出來(lái),即將業(yè)務(wù)邏輯從應(yīng)用服務(wù)中分離出來(lái)。然后以攔截的方式作用在一個(gè)方法的不同位置。例如日志,事務(wù)的處理;注意事項(xiàng):Spring 底層原理:xml+dom4j+ 工廠設(shè)計(jì)模式+反射3.3. Spring 框架的好處1. 方便解耦,降低維護(hù)難度,提高開(kāi)發(fā)效率( Spring 相當(dāng)于是一個(gè)大的工廠,它提供的 IOC 思想,可 以將對(duì)象的創(chuàng)建和依賴關(guān)系維護(hù)都交給 spring 管理);2. spring 支持 AOP 編程( spring 提供面向切面編程,可以很方便的實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截和運(yùn)行 監(jiān)控等功能,可以將一些通用任務(wù)如安全、事務(wù)、日志等進(jìn)行集中式管理,從而提供了

9、更好的復(fù)用);3. Spring 致力于 J2EE 應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案。在企業(yè)級(jí)開(kāi)發(fā)中,通 常用于整合其他層次的框架;4. 方便程序的測(cè)試( Spring 對(duì) junit4 支持,可以通過(guò)注解測(cè)試 Spring 程序,非常便捷);5. 方便集成各種優(yōu)秀的框架 ( Spring 并不強(qiáng)制應(yīng)用完全依賴于 Spring ,開(kāi)發(fā)者可自由選用 Spring 框 架的部分或全部,也可以集成其他優(yōu)秀的框架);6. Spring 降低了 javaEE API 的使用難度( Spring 對(duì) javaEE 開(kāi)發(fā)中非常難用的一些 API ,例如 JDBC,javaMail, 遠(yuǎn)程調(diào)

10、用等,都提供了封裝,是這些 API 應(yīng)用難度大大降低);注: Spring 的 DI 機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性,提高了組件之間的解耦3.4. Spring 框架的模塊化1. 簡(jiǎn)單地說(shuō),模塊化就是有組織地把一個(gè)大文件拆成獨(dú)立并互相依賴的多個(gè)小模塊;11Data Access/lntegrationWebSocketServletPortletAspectsInstrumentatioriMessagingCore ContainerBeansCore1ContextSpELJ Spring Framework Runtime2. Spring 框架的功能大約由 20個(gè)模塊組成,這些模塊按組

11、可以分為:(1)Core Co ntain er(核心容器): Bea ns :負(fù)責(zé)Bea n工廠中Bea n的裝配,所謂 Bea n工廠即是創(chuàng)建對(duì)象的工廠,Bea n的裝配也就是對(duì)象的創(chuàng)建工作; Core :這個(gè)模塊即是負(fù)責(zé)IOC (控制反轉(zhuǎn))最基本的實(shí)現(xiàn); Con text : Spring 的IOC容器,因大量調(diào)用 Spring Core 中的函數(shù),整合了 Spring 的大部分功能。Bea n創(chuàng)建好對(duì)象后,由 Con text負(fù)責(zé)建立Bea n與Bea n之間的關(guān)系并維護(hù)。所以也可以把Con text 看成是Bea n關(guān)系的集合; SpEl :即 Spring Expression L

12、anguage( Spring表達(dá)式語(yǔ)言);(2)Data Access/Integration(數(shù)據(jù)訪問(wèn) / 集成): JDBC :對(duì)JDBC的簡(jiǎn)單封裝; ORM 支持?jǐn)?shù)據(jù)集成框架的圭寸裝(如 Mybatis ,Hibernate ); OXM:即Object XML Mapper,它的作用是在 Java對(duì)象和XML文檔之間來(lái)回轉(zhuǎn)換; JMS :生產(chǎn)者和消費(fèi)者的消息功能的實(shí)現(xiàn); Tran satio ns:事務(wù)管理;(3) Web與遠(yuǎn)程調(diào)用: WebSocket :提供 Socket 通信,web端的的推送功能; Servlet : Spring MVC 框架的實(shí)現(xiàn); Web:包含web應(yīng)用

13、開(kāi)發(fā)用到Spring 框架時(shí)所需的核心類,包括自動(dòng)載入WebApplicatio nCo ntext特性的類,Struts集成類、文件上傳的支持類、Filter類和大量輔助工具類; Portlet :實(shí)現(xiàn) web模塊功能的聚合(如網(wǎng)站首頁(yè)(Portlet );Port )下面可能會(huì)有不同的子窗口(4) AOP:面向切面; Aspects :同樣是面向切面的一個(gè)重要的組成部分,提供對(duì)In strume ntatio n(設(shè)備):相當(dāng)于一個(gè)檢測(cè)器,提供對(duì)(7) Messagi ng(消息):Spri ng 提供的對(duì)消息處理的功能;AspectJ 框架的整合;JVM以及對(duì)Tomcat的檢測(cè);(8)

14、Test (測(cè)試):我們?cè)谧鰡卧獪y(cè)試時(shí),Spri ng會(huì)幫我們初始化一些測(cè)試過(guò)程當(dāng)中需要用到的資源對(duì)象;i_=j 弓 pri ng-aop-4.1.2 .RE LEASE .jar| ” q spring-aspects-4J,2H RE LEASE jar全I(xiàn) spring七i =i ?pring-CQntext-4h1,2.RELEASE,jarI d 5 pri ng - context-5 up pc rt-4,1.2 .RE LEASE .j ari =,5pring-core-4.1.2.RELEASE.jarI_J spring cxprc5iion 4J.2. RE LEASE

15、 Jar| 全| Spring-inst-ument-4.1.2.RELEASE.jari二I spring-instrument-tomcat-4J2.RELEASEja 國(guó) pring Jdbt-4.1.RELEASE jar,_=j sprirg-jms-4.1.2.RELEA&.jar區(qū) tpringme&saging-4J pRELEASEjari i s p ri ng - o rm-4.,12. RE LEAS E .ja r.5pring-QMm-4.1.2.RELEASE,jar應(yīng) spring-test-4.1 .ZJIELEASEjarLi?| 5pring-tx-4.1

16、.2. RE LEASE.Jar i 3prin web 4,12bRELCASEjarl 全| spring-webrnvc-4.1.2.RELEASE.jar-I spring-wsbmvc-portlstl.RELEASEjaL j?l pring*websocket-4.1.2rRELEAE.jar4. Spring 入門1. Spring 提供了強(qiáng)大的IOC機(jī)制,能夠幫助我們管理對(duì)象和依賴關(guān)系維護(hù):(1) 管理對(duì)象:包括對(duì)象的創(chuàng)建,初始化,和銷毀(分情況);注:通常被Spring 管理的類稱之為 Bean,在Spring 容器中的對(duì)象稱之為Bean對(duì)象;(2) 依賴關(guān)系維護(hù):DI (

17、 Dependency Injection)依賴注入,后續(xù)再講;4.1. 完成第一個(gè)Spring第一步:導(dǎo)入Spring 相關(guān)jar 包dac libsschema _ Ikerse.tKt rrotice.txt readme.txtresources 中:spring-framework-4.1.2.RELEASEj眄源碼dot文件ml的約束文件 說(shuō)明開(kāi)源協(xié)議中文文檔參考:Sprin g-Refere nce_2.5_zh_CN.chm1. 我們可以先導(dǎo)入核心包 (core) 與beans包:a c.om.G,apactie.ccmmon5.loggir)g-

18、l.l.ljar&5 pri ng beens-4d .2.RELEASE j a r袒 sprirrg-context-4.1.2.RELEASEjar:胡 s pri ng -core-4.1.2-ELAE .jarFjar2. 導(dǎo)包的時(shí)候注意,現(xiàn)在使用Spring ,要完成最小導(dǎo)包,即:需要什么jar包,我們就導(dǎo)入什么包,用到了其他功能,再添加相應(yīng)jar包。這個(gè)對(duì)咱們認(rèn)識(shí)框架的包是非常有幫助的。不然以后由于出現(xiàn)問(wèn)題自己都不知道應(yīng)該怎么解決;第二步:導(dǎo)入Spring配置文件1. 在classpath的根目錄下新建一個(gè)applicactionContext.xml配置文件,文件名可以自定義,

19、但是通常使用即plicactio nCon text這個(gè)名字;2. 添加文檔聲明和約束(這個(gè)東西不需要記憶):(1) 可以參考文檔,中英文文檔都可以; spri ng-framework-4.1.2.RELEASEdocsspri ng-framework-refere ncepdf(2) 可以參考資源中的資料;(3) 可以百度spring 的配置文件;(4) 也可以直接拿以下內(nèi)容去修改bea nsxml ns=/schema/bea nsxml ns:xsi=/2001/XMLSchema-i nsta

20、 nee xsi:schemaLocation=/schema/bea ns /schema/bea ns/spri ng-bea ns.xsd第三步:編寫邏輯代碼1. 準(zhǔn)備一個(gè)普通的 Java類(MyBean )public class MyBea n public void hello()System out.pri ntl n(hello spri ng.);第四步:將這個(gè)類交給Spring去管理即注冊(cè)到Spring容器中1. 大家要記得,Spri ng 是一個(gè)容器,我們需

21、要把我們的類交給Spring 去管理。因?yàn)?,我們的測(cè)試是創(chuàng)建一個(gè)普通的類,然后再通過(guò) Spring 幫我們把這個(gè)類的對(duì)象創(chuàng)建出來(lái)就算是成功了;2. 在配置文件中將這個(gè) Java類交給Spri ng管理。在applicati on Co ntext.xml中配置bea ns v/bearv/bea ns3. 元素和屬性講解:bean元素:表示對(duì)象配置或注冊(cè)標(biāo)簽;id屬性:這個(gè)bean對(duì)象在Spring 容器中的唯一標(biāo)識(shí),也可以使用name,常用id (唯一特性),獲取這個(gè)對(duì)象的時(shí)候就可以通過(guò)這個(gè)表示來(lái)獲??;class 屬性:對(duì)應(yīng)對(duì)象所屬類的完全限定名。注意這里可以是JDK自帶的類,也可以是自己新

22、建的類;問(wèn)題:我想使用或者獲取Spring 容器創(chuàng)建的這個(gè)對(duì)象或 Bean,那么如何操作?4.2. Spring容器的實(shí)例化(如何創(chuàng)容器對(duì)象_測(cè)試用)1. Spring 容器對(duì)象有兩種:BeanFactory 和 ApplicationContext;2. ApplicationContext繼承自BeanFactory接口,擁有更多的企業(yè)級(jí)方法,推薦使用該類型;4.2.1. BeanFactory1. Bea nFactory是一個(gè)接口,可以通過(guò)其實(shí)現(xiàn)類XmlBea nFactor獲取其實(shí)例。接口中有一個(gè)getBean() 方法可以獲取Spring 容器中配置或注冊(cè)的 Bean對(duì)象;Test

23、public void testHelloSpring() throws Exception *我們第一步是要啟動(dòng)框架,而啟動(dòng)框架則需要拿到Spring的核心對(duì)象*咱們學(xué)習(xí)的第一個(gè)核心對(duì)象是 BeanFactory :顧名思義,這是一個(gè)創(chuàng)建 Bean的工廠*而B(niǎo)ean工廠創(chuàng)建對(duì)象又必需拿到配置文件中的數(shù)據(jù)*因?yàn)椋何覀兊牡谝徊阶x取配置文件,拿到BeanFactory工廠*/第一步:讀取資源文件IResource resource =new ClassPathResourceapplicationContext.xml);第二步:拿到核心對(duì)象Bea nFactoryIBea nF actory f

24、actory =new XmlBeanF actory(resource);422. ApplicationContext (推薦使用)1. ApplicationContext的中文意思是”應(yīng)用程序上下文”,它繼承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在國(guó)際化支持、資源訪問(wèn)(如 URL和文件)、事件傳播等方面進(jìn)行了良好的支持,被推薦為JavaEE應(yīng)用之首選,可應(yīng)用在 Java APP 與Java Web 中;2. 要使用ApplicationContext的功能,必需要導(dǎo)入相應(yīng)的jar 包:spri ng-co ntext-4.12RELEASE.jar

25、-上下文spring-expression-4.1.2.RELEASE.jar-Spring 表達(dá)式語(yǔ)言/加載文件系統(tǒng)中的配置文件實(shí)例化IStri ng conf = C:applicatio nCon text.xml;Applicati onCon text factory = new FileSystemXmlApplicatio nCon text(co nf);/加載工程classpath下的配置文件實(shí)例化IStri ng conf = applicatio nCon text.xml;Applicati onCon text factory = new ClassPathXmlAp

26、plicatio nCon text(c onf);4.2.3. 獲取對(duì)象方式方式一:通過(guò)id直接拿到相應(yīng)的Bean對(duì)象通過(guò)xml中配置的id拿到對(duì)象IMyBea n bea n = (MyBea n)factory.getBea nm yBea n);System.out.pri ntln( bea n);方式二:通過(guò)id與對(duì)象的Class對(duì)象拿到Bean對(duì)象(推薦使用)1/通過(guò)id與對(duì)象的class拿到Bean對(duì)象MyBea n bea n = factory.getBea n(myBea n,MyBea n.class);System.out.pri ntln( bea n);4.2.4

27、. Applicationcontext 與 BeanFactory 的區(qū)別【掌握】聯(lián)系:1. ApplicationContext是BeanFactory的子類,擁有更多的功能與方法;區(qū)別:1. Applicati on Co ntext默認(rèn)是在讀取配置文件的時(shí)候就會(huì)根據(jù)配置創(chuàng)建Bean對(duì)象(迫切加載)。而B(niǎo)eanFactory是在使用的時(shí)候才進(jìn)行對(duì)象的創(chuàng)建(懶加載/延遲加載)擴(kuò)展:1. 我們?cè)谑褂肁pplicationContext的時(shí)候,可以通過(guò)配置讓它也變成與BeanFactory樣的懶加載:配置一:讓所有 Bean都變成懶加載,只需要在 標(biāo)簽中加入 default-lazy-init

28、=true: 配置二:讓其中一個(gè)Bean變成懶加載,在 標(biāo)簽中加入lazy-init =true:5. Spring配置細(xì)節(jié)5.1. Bean對(duì)象的作用域1. 指的是我們配置的 Bean是單例還是多例/原型0 KuriNith(SpringJUnit4ClasRunner.clBfs)1 ContcxtConfiguration2 public class ScopeTest :a4-ftutowiredprivate AppliesizionContastt context 56了丁斛utowi 廣“8 priva 七電 ScopeEean scop eBear);9餌調(diào)用多枝都得劉同一個(gè)血

29、測(cè)1 public void 七亡七()_,2 System .ou t . prln t In (匚 口11七已31 七.etEear (n5tupe3edn) j System.out.println(cdntext.eetEean(sope0ean);4Sytpm .out. pr i nTl n(context. gctFan( i;rDp&Rpn,)j;System .out. print in (context. geGean( HscopeBadnkl);| fe /System,cut.printIn(scopcBcan)j2. 通過(guò)Bean元素中的scope 屬性指定:?si

30、n gleto n:默認(rèn)值,單例?prototype:多例! -“-._._._._._._._3. 其他屬性值:(一般都不用)悵用城類91?xnalcton (單例)在毎ywiM容卷中僅存左一bean實(shí)例(戦認(rèn)的匕沖邑(蚤謝)用每浚從容器中調(diào)用阮血時(shí).祁返回一新胡冥例+即毎汶謂甲軸七匪瞄() 時(shí)相當(dāng)于執(zhí)行aw曾忍油e an Of不會(huì)衣容3S啟動(dòng)時(shí)創(chuàng)建對(duì)象requt (諸求)-r每枚 E 謠序都會(huì)創(chuàng)建一個(gè)新的beaiusea slcn (令話)一営同一牛KTT? Syrian共寧同一 bean不同的HTTP Sosion不同.glDhalSe?9iaii (全窩 會(huì)畫用一殿用干FtnL骯唾爾環(huán)

31、域*分布式荼藐存在全局社(第點(diǎn)登St) SflRFftxwLtt 3(.圖于5.2. Bean對(duì)象配置懶加載為 true1. Spring 中所有bean對(duì)象全部懶加載:配置文件的根對(duì)象中添加default-lazy-init 2. 單個(gè)Bean對(duì)象懶加載/延遲加載v/bean5.3. Bean對(duì)象的生命周期1. Bean對(duì)象的生命周期指的是:從對(duì)象創(chuàng)建、初始化、調(diào)用執(zhí)行到銷毀的一個(gè)過(guò)程;2. 不同作用域的Bean,生命周期有所區(qū)別:(1) Spring 管理的Bean對(duì)象默認(rèn)是單例的,可以設(shè)置成多例;(2) Bean對(duì)象的實(shí)例化和初始化: 實(shí)例化實(shí)質(zhì)是Spring容器調(diào)用Bean的無(wú)參構(gòu)造創(chuàng)

32、建Bean對(duì)象; 初始化實(shí)質(zhì)上是Spri ng容器調(diào)用指定的初始化方法; BeanFactory管理的 Bean默認(rèn)是在使用的時(shí)候才創(chuàng)建Bean對(duì)象,即延遲加載,而AppliacationContext管理的Bean默認(rèn)是在容器創(chuàng)建的時(shí)候就會(huì)創(chuàng)建Bean對(duì)象,即迫切加載; 如果是多例的Bean,都是在獲取的時(shí)候才創(chuàng)建Bean對(duì)象,因?yàn)橹挥蝎@取的時(shí)候才知道要獲取多少個(gè)Bean對(duì)象;(3) Bean對(duì)象的銷毀: 實(shí)質(zhì)上是Spring 容器調(diào)用指定的銷毀方法(并不是真正意義上的銷毀Bean對(duì)象); 單例的Bean是在容器關(guān)閉的時(shí)候(ApplicationContext對(duì)象沒(méi)有close 方法,其實(shí)現(xiàn)

33、類有)會(huì)自動(dòng)調(diào)用指定的銷毀方法; 多例的Bean容器不會(huì)管理,因?yàn)楦揪筒恢烙卸嗌賯€(gè)bean對(duì)象;3. 可以通過(guò)bean元素的init-method 和destroy-method屬性指定初始化方法和銷毀方法。但是一般我們自己不會(huì)來(lái)配置這個(gè)生命周期。而這個(gè)基本上Spring自身來(lái)使用,例如在Spri ng 操作連接池的時(shí)候,它會(huì)在 DateSource銷毀的時(shí)候執(zhí)行;6. Spring 測(cè)試6.1. Spring測(cè)試介紹單元測(cè)試在我們的軟件開(kāi)發(fā)流程中占有舉足輕重的地位;2.3.而且目前基于Java的企業(yè)應(yīng)用軟件來(lái)說(shuō),Spri ng已經(jīng)成為了標(biāo)準(zhǔn)配置,那么如何在Spri ng 框架中更好的使用

34、單元測(cè)試呢?Spring框架提供了對(duì)單元測(cè)試(ju nit4)的強(qiáng)大支持,我們不用在使用傳統(tǒng)的單元測(cè)試去測(cè)試Spring功能。通過(guò) Sprin gJu nit測(cè)試,使用注解幫我們讀取配置文件和賦值,簡(jiǎn)化測(cè)試代碼,提高測(cè)試效率;a丄纏壑凹暨墜昨SpilL.卓奮刪遨勉4. 三大框架整合的時(shí)候如果Spring 的配置文件不能讀取,那么整個(gè)項(xiàng)目是跑不起來(lái)的,而Spring 的測(cè)試可以讓我們?cè)诓粏?dòng)服務(wù)器的情況下,使用注解讀取相應(yīng)的配置文件,把項(xiàng)目跑起來(lái);6.2. Spring測(cè)試步驟第一步:導(dǎo)入相應(yīng)的包sprin g-test-4.1.2.RELEASE.jar-測(cè)試包spring-aop-4.1.2

35、.RELEASE.jar- AOP 包注意:測(cè)試包依賴 AOP,所以需要導(dǎo)入 AOP的jar包,如果沒(méi)有導(dǎo)入會(huì)報(bào)錯(cuò):java.Ing.rQ匚I曰ssDHFDunTEirDr: qrg/springframework/aop/7argetSource第二步:編寫測(cè)試類和方法注解:RunWith :表示先啟動(dòng) Spring 容器,把junit 運(yùn)行在Spring容器中;Con textC on figurati on (classpath:applicati onCon text.xml) 路徑去加載資源文件;:表示從 CLASSPATHAutowired :表示自動(dòng)裝配,自動(dòng)從Spring 容器

36、中取出對(duì)應(yīng) bean賦值給當(dāng)前使用的屬性;Spring測(cè)試代碼:/* RunWith :代表開(kāi)啟Spring的測(cè)試*SpringJUnit4ClassRunner:代表是 Junit4 的測(cè)試環(huán)境* ContextConfiguration :找到我們的核心配置文件*特別注意這里路徑:* 方式一(web工程,正式開(kāi)發(fā)時(shí)使用):/cn/itsource/_02_test/applicationContext.xml t 從當(dāng)前類所在包找(不建議使用)classpath:cn/itsource/ 02 test/applicationContext.xml t 從 classpath 的根目錄開(kāi)始

37、(正式開(kāi)發(fā))* 方式二(測(cè)試的時(shí)候使用):applicationContext.xml t當(dāng)前類所在的包下面開(kāi)始查找* 方式三(測(cè)試的時(shí)候使用):注解后面不寫名稱t在當(dāng)前目錄下來(lái)創(chuàng)建 xml的名稱為:測(cè)試類名-Context.xml例:SpringTest-Context.xml。使用這種方式,這種寫法好處是ContextConfiguration可以不加參數(shù)* author Administrator*/RunWith (SpringJUnit4ClassRunner. class)ContextConfiguration( classpath:applicationContext.xml)

38、 public class SpringTest /* 現(xiàn)在的測(cè)試環(huán)境應(yīng)該是這樣的* Spring環(huán)境自行啟動(dòng),所有的核心對(duì)象已經(jīng)處于Spring之中,都應(yīng)該由Spring自己來(lái)創(chuàng)建* Autowired 的意思是自動(dòng)注入,ApplcationContext這個(gè)類是Spring內(nèi)部存在的,它也是一個(gè)Bean,Spring可以把它創(chuàng)建岀來(lái),在它看到上面的這個(gè)標(biāo)簽后,再把創(chuàng)建的Bean注入進(jìn)來(lái)*/Autowiredprivate ApplicationContext context;/*這個(gè)TestBean我們已經(jīng)在Spring中配置好。交給 Spring來(lái)管理* Spring即可以來(lái)創(chuàng)建這個(gè)對(duì)象

39、,然后將這個(gè)對(duì)象賦值給這個(gè)成員變量*/Autowiredprivate TestBean testBear;Testpublic void testGetBean() throws Exception System.out.println( testBear);小結(jié):Spring測(cè)試讓測(cè)試變得更加簡(jiǎn)單,需要注意配置文件的位置,需要了解幾個(gè)注解:Ru nWith(Spri ngJu nit4ClassR unn er.class)ContextConfiguration( “l(fā)asspath:applicationContext.xml )AutoWired7. Spring依賴注入1. Spr

40、i ng中的對(duì)象都是由Spri ng進(jìn)行統(tǒng)一管理,但是在對(duì)象中還存在屬性,這些屬性實(shí)際上引用的也是別的對(duì)象,那么這些對(duì)象也是由Spring來(lái)管理的;2. 在實(shí)際使用時(shí),我們需要給Spring中對(duì)象的屬性字段賦值,這稱為依賴注入DI ( DependencyInjection ),也稱之為屬性注入;3. Spri ng支持的屬性注入的方式有:setter方法注入和有參構(gòu)造注入;7.1. 有參構(gòu)造注入顧名思義:必須包含有參構(gòu)造器才能注入成功;I public class Phone privateStringcpu;privateStringsim;privateStringsd;publicPh

41、one() publicPhone(Stringcpu) this . cpu = cpu;public void setSim(String sim) this . sim = sim ;public void setSd(String sd) this . sd = sd;Overridepublic String toString() + sd + return Phone cpu= + cpu + , sim= + sim + , sd= /xml 配置:vbean id =phone class =cn.itsource.bean.Phonevconstructor-arg inde

42、x =0 value =RAM11 /constructor-arg/測(cè)試:RunWith(SpringJUnit4ClassRunner. class )ContextConfiguration (classpath:applicationContext.xml)public class SpringTest Autowiredprivate Phone phone;Testpublic void testCreateObj() System. out .println( phone );/結(jié)果:Phone cpu=RAM11, sim=null, sd=null注意事項(xiàng):有參構(gòu)造注入的方式

43、一般很少用,依賴性太強(qiáng)(必須提供有參構(gòu)造);7.2. setter方法注入顧名思義:必須包含相應(yīng)setter方法才能注入成功,而且必須有無(wú)參構(gòu)造;public class Phone privateStringcpu;privateStringsim;privateStringsd;publicPhone() publicPhone(Stringcpu) this . cpu = cpu;public void setSim(String sim) this . sim = sim ;public void setSd(String sd) this . sd = sd;IOverride:p

44、ublic String toString() Ireturn Phone cpu= + cpu + , sim= + sim + , sd= + sd + ;iiiij /xml 配置:I vbean id =phone class =cn.itsource.bean.Phonevconstructor-arg index =0 value =RAM11 i vproperty name=sim value =中國(guó)電信i i vproperty name=sd value =512M ! /測(cè)試:I:RunWith(SpringJUnit4ClassRunner. class ):Conte

45、xtConfiguration (classpath:applicationContext.xml)I:public class SpringTest IAutowiredprivate Phone phone;iTestIpublic void testCreateObj() System. out .println( phone );! I/結(jié)果:! Phone cpu=RAM11, sim= 中國(guó)電信,sd=512M小結(jié):絕大多數(shù)情況下都是用setter方法注入,構(gòu)造器注入了解;73 Spring配置連接池731.導(dǎo)入jar包 = = = = = mons.dbcp-1.2.2.osgi

46、.jar-數(shù)據(jù)源 /連接池的 jar 包c(diǎn)om.spri mon s.pool-1.5.3.jarmysql-connector-java-5.1.26-bin .jar- mysql 驅(qū)動(dòng)包732.配置 BasicDataSource 對(duì)象v?xml versio n=1.0 en codi ng=UTF-8?I|7.3.3. perties 文件jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:/localhost:3306/userjdbc.user name=rootjdbc.password=root注意事項(xiàng):username 定要加前綴【jdbc.】,不然會(huì)出現(xiàn)問(wèn)題。因?yàn)閡sername 已經(jīng)被Spring 在使用,會(huì)導(dǎo)致咱們的 username 失效,產(chǎn)生錯(cuò)誤!當(dāng)然也可以通過(guò)配置的形式解決該錯(cuò)誤:_ .-._.一_._._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 建議:使用帶前綴的 key形式7.3.4. 測(cè)試代碼Autowired private BasicDataSource dataSource;Testpublic void testGetC onnection() throws Excepti

溫馨提示

  • 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)論