spring ioc容器深入理解上線資源包1課件_第1頁
spring ioc容器深入理解上線資源包1課件_第2頁
spring ioc容器深入理解上線資源包1課件_第3頁
spring ioc容器深入理解上線資源包1課件_第4頁
spring ioc容器深入理解上線資源包1課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Spring

IoC容器深入理解SpringIoC容器深入理解—課程概要IoC概述Java反射機制資源訪問工具類BeanFactory和ApplicationContext的介紹Bean的生命周期SpringIoC容器深入理解IoC概述IoC概述IoC是Spring容器的內核,AOP、聲明式事務等功能都依賴于此功能,它涉及代碼解耦,設計模式、代碼優(yōu)化等問題的考量,我們將通過以下三方面來深入了解IoC:IoC的初步理解IoC的注入類型IoC的注入方式IoC概述–IoC的初步理解IoC的概念重要但比較晦澀難懂,如下將通過一個小例子來說明這個概念:示例場景:電影:無間道

-》角色:劉建明

-》演員:劉德華WuJianDao+tianTai():voidLiuDeHua+declare():void劇本和演員直接耦合WuJianDao+tianTai():voidLiuJianming+declare():voidLiuDeHua+declare():void<<create>>引入角色接口后的關系示例場景:電影:無間道

-》角色:劉建明

-》演員:劉德華IoC概述–IoC的初步理解WuJianDao+tianTai():voidDirector+directMovie():voidLiuJianming+declare():void<<create>>LiuDeHua+declare():voidIoC的字面理解:其一:控制其二:反轉DI概念的引入:讓調用類對某一接口實現(xiàn)類的依賴關系由第三方注入,以移除調用類對某一接口實現(xiàn)類的依賴引入導演,劇本和飾演者完全解耦IoC概述–IoC的注入類型從注入方法上看,主要劃分為三種類型:構造函數(shù)注入屬性注入接口注入IoC概述–IoC的注入類型構造函數(shù)注入:通過調用類的構造函數(shù),將接口實現(xiàn)類通過構造函數(shù)變量傳入:PublicclassWuJianDao{privateLiuJianmingljm;//1:注入劉建明的具體扮演者publicWuJianDao(LiuJianmingljm){this.ljm=ljm;}publicvoidtianTai(){ljm.declare(“我想做一個好人!”)}}PublicclassDirector{publicvoiddirect(){//2.指定角色的扮演者LiuJianmingljm=newLiuDeHua();//3.注入具體扮演者到劇本中WuJianDaowjd=newWuJianDao(ljm);wjd.tianTai();}}IoC概述–IoC的注入類型屬性注入:通過Setter方法完成調用類所需依賴的注入,更加靈活方便:PublicclassWuJianDao{privateLiuJianmingljm;//1.屬性注入方法publicvoidsetLjm(LiuJianminljm){this.ljm=ljm;}publicvoidtianTai(){ljm.declare(“我想做一個好人!”)}}PublicclassDirector{publicvoiddirect(){LiuJianmingljm=newLiuDeHua();WuJianDaowjd=newWuJianDao();//2.調用屬性Setter方法注入wjd.setLjm(ljm);wjd.tianTai();}IoC概述–IoC的注入類型接口注入:將調用類所有依賴注入的方法抽取到一個接口中,調用類通過實現(xiàn)該接口提供相應的注入方法。PublicclassWuJianDaoimplementsActorArrangable{privateLiuJianmingljm;//1.實現(xiàn)接口方法publicvoidinjectLjm(LiuJianmingljm){this.ljm=ljm;}publicvoidtianTai(){ljm.declare(“我想做一個好人!”)}}PublicclassDirector{publicvoiddirect(){LiuJianmingljm=newLiuDeHua();WuJianDaowjd=newWuJianDao();wjd.injectLjm(ljm);wjd.tianTai();}}PublicinterfaceActorArrangable{voidinjectLjm(LiuJianmingljm);}IoC概述–IoC的注入方式Spring作為一個容器,通過配置文件或者注解描述類和類之間的依賴關系,自動完成類的初始化和依賴注入的工作,下面是對以上實例進行配置的配置文件片段://1.實現(xiàn)類實例化<beanid=“l(fā)jm"class=“LiuDeHua"/>//2.通過ljm-ref建立依賴關系<beanid=“wjd"class=“WuJianDao"p:ljm-ref=“l(fā)jm”/></beans>SpringIoC容器深入理解Java反射機制Java反射機制Java語言允許通過程序化的方式間接對Class的對象實例操作,Class文件由類裝載器裝載后,在JVM中將形成一份描述Class結構的元信息對象,通過該元信息對象可以獲知Class的結構信息,如構造函數(shù)、屬性和方法等:示例講解:通過實例探訪Java反射機制ClassLoader:介紹ClassLoader的工作機制以及重要方法Java反射機制:深入講解Java的反射機制與IoC的關系:通過實例介紹Java反射機制與Spring

IoC之間的關系Java反射機制–示例講解編寫一個簡單示例開始探訪Java反射機制的征程,通過比較傳統(tǒng)方法以及反射機制創(chuàng)建類實例的不同,來介紹Java反射機制的原理:Car類:擁有兩個構造函數(shù),一個方法以及三個屬性傳統(tǒng)調用方法,使用構造函數(shù)設置屬性或者set方法設置屬性1.構造函數(shù)方法:Carcar=newCar(“紅旗轎車”,“黑色”,“180”);2.Set方法:Carcar=newCar();car.setBrand(“紅旗轎車”);Java反射機制,以一種更加通用的方式間接地操作目標類Java反射機制–ClassLoader類裝載器就是尋找類的字節(jié)碼文件并構造出類在JVM內部表示的對象組件,主要工作由ClassLoader及其子類負責,ClassLoader是一個重要的Java運行時系統(tǒng)組件,它負責在運行時查找和裝入Class字節(jié)碼文件:重要方法:ClassloadClass(Stringname)ClassdefineClass(Stringname,byte[]b,intoff,intlen)ClassfindSystemClass(Stringname)ClassfindLoadedClass(Stringname)ClassLoadergetParent()工作機制:裝載:查找和導入Class文件鏈接:執(zhí)行校驗,準備和解析步驟初始化:對類的靜態(tài)變量、靜態(tài)代碼塊執(zhí)行初始化工作Java反射機制–Java反射機制Class反射對象描述類語義結構,可以從Class對象中獲取構造函數(shù),成員變量,方法等類元素的反射對象,并以編程的方式通過這些反射對象對目標類對象進行操作。這些反射對象類在java.reflect包中定義,下面是最主要的三個反射類:ConstructorMethodClassgetReturnType()Class[]getParameterTypes()Class[]getExceptionTypes()Annotation[][]getParameterAnnotations()FieldJava反射機制–與IoC的關系

在Spring中,通過IOC可以將實現(xiàn)類、參數(shù)信息等配置在其對應的配置文件中,那么當需要更改實現(xiàn)類或參數(shù)信息時,只需要修改配置文件即可,

我們還可以對某對象所需要的其它對象進行注入,這種注入都是在配置文件中做的。Spring的IOC的實現(xiàn)原理利用的就是Java的反射機制,Spring的工廠類會幫我們完成配置文件的讀取、利用反射機制注入對象等工作,我們可以通過bean的名稱獲取對應的對象。SpringIoC容器深入理解資源訪問工具類JDK所提供的訪問資源的類并不能很好的滿足各種底層資源的訪問需求,因此,Spring設計了一個Resource接口,它為應用提供了更強大的訪問底層資源的能力:資源訪問工具類具體實現(xiàn)類:ByteArrayResourceClassPathResourceFileSystemResourceInputStreamResourceServletContextResourceUrlResource主要方法:booleanexists()booleanisOpen()URLgetURL()FilegetFile()InputStreamgetInputStream()為了訪問不同類型的資源,必須使用相應的Resource實現(xiàn)類,這是比較麻煩的,Spring提供了一個強大的加載資源的機制,能夠自動識別不同的資源類型:資源訪問工具類Ant風格的匹配符:?:匹配文件名中的一個字符*:匹配文件名中的任意字符**:匹配多層路徑Ant風格的資源路徑示例:

/t*st.xmlFile:D:/conf/*.xml/**/test.xmlClasspath:org/springframework/**/*.xml資源類型地址前綴:classpath/jike/bean.xmlFile/jike/bean.xmlhttp://ftp/bean.xml無前綴com/jike/bean.xmlSpring定義了一套資源加載的接口,并提供了實現(xiàn)類,如下:資源訪問工具類ResourcePatternResolver+getResource(StringlocationPattern):ResourceResourceLoader+getResource(Stringlocation):ResourcePathMatchingResourcePatternResolverResource+getFile():FileResourcePatternResolverresolver=newPathMatchingResourcePatternResolver();//加載所有類包com(及子孫包)下的以xml為后綴的資源Resourceresources[]=resolver.getResources("classpath*/**/*.xml");for(Resourceresource:resources){System.out.println(resource.getDescription());}SpringIoC容器深入理解BeanFactory和ApplicationContext的介紹BeanFactory和ApplicationContext的介紹BeanFactory是Spring框架最核心的接口,它提供了高級IoC的配置機制。ApplicationContext建立在BeanFactory基礎之上,提供了更多面向應用的功能,它提供了國際化支持和框架事件體系,更易于創(chuàng)建實際應用一般成BeanFactory為IoC容器,而稱ApplicationContext為應用上下文:BeanFactory是一個類工廠,可以創(chuàng)建并管理各種類的對象,Spring稱這些創(chuàng)建和管理的Java對象為Bean。在Spring中,Java對象的范圍更加寬泛。接下來我們對BeanFactory的類體系結構以及裝載初始化順序進行說明:類體系結構:XmlBeanFactoryListableBeanFactoryHierarhicalBeanFactoryConfigurableBeanFactoryAutowireCapableBeanFactorySingletonBeanFactoryBeanDefinitionRegistry初始化順序:創(chuàng)建配置文件裝載配置文件啟動IoC容器獲取Bean實例BeanFactory和ApplicationContext的介紹–BeanFactory的介紹ApplicationContext由BeanFactory派生而來,提供了更多面向實際應用的功能。在BeanFactory中,很多功能需要以編程的方式方式實現(xiàn),而在ApplicationContext中則可以通過配置的方式實現(xiàn)。接下來介紹一下ApplicationContext的實現(xiàn)類以及類體系結構:具體實現(xiàn)類:ClassPathXmlApplicationContextFileSystemXmlApplicationContextConfigurableApplicationContext擴展接口:ApplicationEventPublisherMessageSourceReaourcePatternResolverLifeCycleBeanFactory和ApplicationContext的介紹–ApplicationContext的介紹和BeanFactory初始化相似,ApplicationContext的初始化也很簡單,根據(jù)配置文件路徑不同可以選擇不同的實現(xiàn)類加載:ClassPathXmlApplicationContextFileSystemXmlApplicationContextBean的實例化問題BeanFactory和ApplicationContext的介紹–ApplicationContext的介紹SpringIoC容器深入理解Bean的生命周期Bean的生命周期Spring容器中的Bean擁有明確的生命周期,由多個特定的生命階段組成,每個生命階段都允許外界對Bean施加控制。在Spring中,我們從Bean的作用范圍和實例化Bean時所經歷的一系列階段來描述Bean的生命周期:BeanFactory中的Bean的生命周期ApplicationContext中的Bean的生命周期如下通過一個圖形化的方式進行描述BeanFactory中的Bean的生命周期:調用InstantiationAwareBeanPostProssor的postProcessBeforeInstantiation()方法調用BeanNameAware的setBeanName()方法調用InstantiationAwareBeanPostProssor的postProcessPropertyValues()方法調用InstantiationAwareBeanPostProssor的postProcessAfterInstantiation()方法實例化設置屬性值調用BeanFactoryAware的setBeanFactory()方法調用InitializingBean的afterPropertiesSet()方法調用BeanPostProcessor的postProcessBeforeInitialization()方法調用BeanPostProcessor的postProcessAfterInitialization()方法調用init-method屬性配置的初始化方法將準備就緒的Bean交給使用者Spring緩存池中準備就緒的Bean調用DisposableBean的afterPropertiesSet()方法調用destroy-method屬性配置的銷毀方法【singleton】【prototype】【容器銷毀】Bean的生命周期–BeanFactory中的Bean的生命周期如下通過一個圖形化的方式進行描述BeanFactory中的Bean的生命周期:調用InstantiationAwareBeanPostProssor的postProcessBeforeInstantiation()方法調用BeanNameAware的setBeanName()方法調用InstantiationAwareBeanPostProssor的postProcessPropertyValues()方法調用InstantiationAwareBeanPostProssor的po

溫馨提示

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

評論

0/150

提交評論