編程-Spring基礎(chǔ)_第1頁
編程-Spring基礎(chǔ)_第2頁
編程-Spring基礎(chǔ)_第3頁
編程-Spring基礎(chǔ)_第4頁
編程-Spring基礎(chǔ)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、ice 離開了EmployeeDao 就無法進行工作了;問題:若把 IEmployeeDao的實現(xiàn)改成:EmployeeHibernateDaoImpI?傳統(tǒng)解決方式:在每一個使用到IEmployeeDao 的地方,都需要修改為 newEmployeeHiber nateDaoImpI();IEmployeeDao實例對象,然后在需要用到IEmployeeDao 的地方工廠模式:通過一個工廠來創(chuàng)建管理直接通過工廠來獲?。簆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二:對象之間依賴關(guān)系處理繁瑣j public class EmpployeeAction private lEmployeeService service;! public class EmpployeeServiceprivate lEmployeeDao dao;問題:如果對象有很多,且互相存在依賴關(guān)系,并且有的對象需要單例模式,有的則需要多個實例,處理起來比較繁瑣;三:事務(wù)控制繁瑣1. 實際開發(fā)中,某一個業(yè)務(wù)邏輯可能會牽涉多個操作(多個sql),事

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

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

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

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

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

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

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

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

14、Test (測試):我們在做單元測試時,Spri ng會幫我們初始化一些測試過程當(dāng)中需要用到的資源對象;i_=j 弓 pri ng-aop-4.1.2 .RE LEASE .jar| ” q spring-aspects-4J,2H RE LEASE jar全I 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 國 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 提供了強大的IOC機制,能夠幫助我們管理對象和依賴關(guān)系維護:(1) 管理對象:包括對象的創(chuàng)建,初始化,和銷毀(分情況);注:通常被Spring 管理的類稱之為 Bean,在Spring 容器中的對象稱之為Bean對象;(2) 依賴關(guān)系維護:DI (

17、 Dependency Injection)依賴注入,后續(xù)再講;4.1. 完成第一個Spring第一步:導(dǎo)入Spring 相關(guān)jar 包dac libsschema _ Ikerse.tKt rrotice.txt readme.txtresources 中:spring-framework-4.1.2.RELEASEj眄源碼dot文件ml的約束文件 說明開源協(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)包的時候注意,現(xiàn)在使用Spring ,要完成最小導(dǎo)包,即:需要什么jar包,我們就導(dǎo)入什么包,用到了其他功能,再添加相應(yīng)jar包。這個對咱們認識框架的包是非常有幫助的。不然以后由于出現(xiàn)問題自己都不知道應(yīng)該怎么解決;第二步:導(dǎo)入Spring配置文件1. 在classpath的根目錄下新建一個applicactionContext.xml配置文件,文件名可以自定義,

19、但是通常使用即plicactio nCon text這個名字;2. 添加文檔聲明和約束(這個東西不需要記憶):(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. 準備一個普通的 Java類(MyBean )public class MyBea n public void hello()System out.pri ntl n(hello spri ng.);第四步:將這個類交給Spring去管理即注冊到Spring容器中1. 大家要記得,Spri ng 是一個容器,我們需

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

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

23、public void testHelloSpring() throws Exception *我們第一步是要啟動框架,而啟動框架則需要拿到Spring的核心對象*咱們學(xué)習(xí)的第一個核心對象是 BeanFactory :顧名思義,這是一個創(chuàng)建 Bean的工廠*而Bean工廠創(chuàng)建對象又必需拿到配置文件中的數(shù)據(jù)*因為:我們的第一步讀取配置文件,拿到BeanFactory工廠*/第一步:讀取資源文件IResource resource =new ClassPathResourceapplicationContext.xml);第二步:拿到核心對象Bea nFactoryIBea nF actory f

24、actory =new XmlBeanF actory(resource);422. ApplicationContext (推薦使用)1. ApplicationContext的中文意思是”應(yīng)用程序上下文”,它繼承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在國際化支持、資源訪問(如 URL和文件)、事件傳播等方面進行了良好的支持,被推薦為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 表達式語言/加載文件系統(tǒng)中的配置文件實例化IStri ng conf = C:applicatio nCon text.xml;Applicati onCon text factory = new FileSystemXmlApplicatio nCon text(co nf);/加載工程classpath下的配置文件實例化IStri ng conf = applicatio nCon text.xml;Applicati onCon text factory = new ClassPathXmlAp

26、plicatio nCon text(c onf);4.2.3. 獲取對象方式方式一:通過id直接拿到相應(yīng)的Bean對象通過xml中配置的id拿到對象IMyBea n bea n = (MyBea n)factory.getBea nm yBea n);System.out.pri ntln( bea n);方式二:通過id與對象的Class對象拿到Bean對象(推薦使用)1/通過id與對象的class拿到Bean對象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默認是在讀取配置文件的時候就會根據(jù)配置創(chuàng)建Bean對象(迫切加載)。而BeanFactory是在使用的時候才進行對象的創(chuàng)建(懶加載/延遲加載)擴展:1. 我們在使用ApplicationContext的時候,可以通過配置讓它也變成與BeanFactory樣的懶加載:配置一:讓所有 Bean都變成懶加載,只需要在 標(biāo)簽中加入 default-lazy-init

28、=true: 配置二:讓其中一個Bean變成懶加載,在 標(biāo)簽中加入lazy-init =true:5. Spring配置細節(jié)5.1. Bean對象的作用域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)用多枝都得劉同一個血

29、測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. 通過Bean元素中的scope 屬性指定:?si

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

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

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

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

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

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

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

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

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

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

40、i ng中的對象都是由Spri ng進行統(tǒng)一管理,但是在對象中還存在屬性,這些屬性實際上引用的也是別的對象,那么這些對象也是由Spring來管理的;2. 在實際使用時,我們需要給Spring中對象的屬性字段賦值,這稱為依賴注入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/測試: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注意事項:有參構(gòu)造注入的方式

43、一般很少用,依賴性太強(必須提供有參構(gòu)造);7.2. setter方法注入顧名思義:必須包含相應(yīng)setter方法才能注入成功,而且必須有無參構(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 =中國電信i i vproperty name=sd value =512M ! /測試: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= 中國電信,sd=512M小結(jié):絕大多數(shù)情況下都是用setter方法注入,構(gòu)造器注入了解;73 Spring配置連接池731.導(dǎo)入jar包 = = = = = mons.dbcp-1.2.2.osgi

46、.jar-數(shù)據(jù)源 /連接池的 jar 包com.spri mon s.pool-1.5.3.jarmysql-connector-java-5.1.26-bin .jar- mysql 驅(qū)動包732.配置 BasicDataSource 對象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注意事項:username 定要加前綴【jdbc.】,不然會出現(xiàn)問題。因為username 已經(jīng)被Spring 在使用,會導(dǎo)致咱們的 username 失效,產(chǎn)生錯誤!當(dāng)然也可以通過配置的形式解決該錯誤:_ .-._.一_._._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 建議:使用帶前綴的 key形式7.3.4. 測試代碼Autowired private BasicDataSource dataSource;Testpublic void testGetC onnection() throws Excepti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論