成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Spring Framework 參考文檔(容器概述)

huashiou / 1781人閱讀

摘要:容器概述接口表示容器,負(fù)責(zé)實(shí)例化配置和組裝。基于的元數(shù)據(jù)不是惟一允許的配置元數(shù)據(jù)形式,容器本身與實(shí)際編寫配置元數(shù)據(jù)的格式完全解耦,現(xiàn)在,許多開發(fā)人員為他們的應(yīng)用程序選擇基于的配置。

容器概述

org.springframework.context.ApplicationContext接口表示Spring IoC容器,負(fù)責(zé)實(shí)例化、配置和組裝bean。容器通過(guò)讀取配置元數(shù)據(jù)獲取關(guān)于要實(shí)例化、配置和組裝哪些對(duì)象的指令,配置元數(shù)據(jù)用XML、Java注解或Java代碼表示,它允許你表達(dá)組成應(yīng)用程序的對(duì)象以及這些對(duì)象之間豐富的相互依賴關(guān)系。

Spring提供了ApplicationContext接口的幾個(gè)實(shí)現(xiàn),在獨(dú)立應(yīng)用程序中,通常創(chuàng)建ClassPathXmlApplicationContext或FileSystemXmlApplicationContext的實(shí)例。雖然XML一直是定義配置元數(shù)據(jù)的傳統(tǒng)格式,但是你可以通過(guò)提供少量XML配置來(lái)聲明支持這些額外的元數(shù)據(jù)格式,從而指示容器使用Java注解或代碼作為元數(shù)據(jù)格式。

在大多數(shù)應(yīng)用程序場(chǎng)景中,不需要顯式用戶代碼來(lái)實(shí)例化Spring IoC容器的一個(gè)或多個(gè)實(shí)例。例如,在web應(yīng)用程序場(chǎng)景中,在應(yīng)用程序的web.xml文件中使用8行左右的簡(jiǎn)單樣例web描述符XML就足夠了(請(qǐng)參閱方便的web應(yīng)用程序的ApplicationContext實(shí)例化)。如果使用Spring Tool Suite(一個(gè)Eclipse支持的開發(fā)環(huán)境),只需單擊幾下鼠標(biāo)或按鍵,就可以輕松創(chuàng)建這個(gè)樣板配置。

下圖顯示了Spring如何工作的高級(jí)別視圖,你的應(yīng)用程序類與配置元數(shù)據(jù)相結(jié)合,這樣,在創(chuàng)建并初始化ApplicationContext之后,你就擁有了一個(gè)完全配置的可執(zhí)行系統(tǒng)或應(yīng)用程序。

配置元數(shù)據(jù)

如上圖所示,Spring IoC容器使用一種配置元數(shù)據(jù)形式,作為應(yīng)用程序開發(fā)人員,此配置元數(shù)據(jù)表示如何告訴Spring容器在應(yīng)用程序中實(shí)例化、配置和組裝對(duì)象。

配置元數(shù)據(jù)通常以簡(jiǎn)單直觀的XML格式提供,本章的大部分內(nèi)容都使用這種格式來(lái)傳達(dá)Spring IoC容器的關(guān)鍵概念和特性。

基于XML的元數(shù)據(jù)不是惟一允許的配置元數(shù)據(jù)形式,Spring IoC容器本身與實(shí)際編寫配置元數(shù)據(jù)的格式完全解耦,現(xiàn)在,許多開發(fā)人員為他們的Spring應(yīng)用程序選擇基于java的配置。

有關(guān)在Spring容器中使用其他形式的元數(shù)據(jù)的信息,請(qǐng)參見:

基于注解的配置:Spring 2.5引入了對(duì)基于注解的配置元數(shù)據(jù)的支持。

基于java的配置:從Spring 3.0開始,Spring JavaConfig項(xiàng)目提供的許多特性成為Spring Framework核心的一部分,因此,你可以使用Java而不是XML文件來(lái)定義應(yīng)用程序類外部的bean,要使用這些新特性,請(qǐng)參見@Configuration、@Bean、@Import和@DependsOn注解。

Spring配置包含容器必須管理的至少一個(gè)bean定義,并且通常包含多個(gè)bean定義,基于XML的配置元數(shù)據(jù)將這些bean配置為頂級(jí)元素中的元素,Java配置通常在@Configuration類中使用@Bean注解的方法。

這些bean定義對(duì)應(yīng)于組成應(yīng)用程序的實(shí)際對(duì)象,通常,你定義服務(wù)層對(duì)象、數(shù)據(jù)訪問(wèn)對(duì)象(DAO)、表示對(duì)象(如Struts Action實(shí)例)、基礎(chǔ)設(shè)施對(duì)象(如Hibernate SessionFactories)、JMS Queues等等。通常,不會(huì)在容器中配置細(xì)粒度域?qū)ο螅驗(yàn)橥ǔS蒁AO和業(yè)務(wù)邏輯負(fù)責(zé)創(chuàng)建和加載域?qū)ο?。不過(guò),你可以使用Spring與AspectJ的集成來(lái)配置在IoC容器控制之外創(chuàng)建的對(duì)象。

下面的例子展示了基于XML的配置元數(shù)據(jù)的基本結(jié)構(gòu):




       
        
    

    
        
    

    

id屬性是標(biāo)識(shí)單個(gè)bean定義的字符串。

class屬性定義bean的類型并使用完全限定的類名。

id屬性的值引用協(xié)作對(duì)象,本例中沒有顯示用于引用協(xié)作對(duì)象的XML,有關(guān)更多信息,請(qǐng)參見依賴關(guān)系。

實(shí)例化一個(gè)容器

提供給ApplicationContext構(gòu)造函數(shù)的位置路徑或路徑是資源字符串,允許容器從各種外部資源(如本地文件系統(tǒng)、Java CLASSPATH等)加載配置元數(shù)據(jù)。

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
在了解了Spring的IoC容器之后,你可能想了解更多關(guān)于Spring的Resource抽象的信息,它提供了一種方便的機(jī)制,可以從URI語(yǔ)法中定義的位置讀取InputStream,特別是,Resource路徑用于構(gòu)造應(yīng)用程序上下文。

下面的示例顯示了服務(wù)層對(duì)象(services.xml)配置文件:




    

    
        
        
        
    

    

下面的例子展示了數(shù)據(jù)訪問(wèn)對(duì)象daos.xml文件:




    
        
    

    
        
    

    

在前面的示例中,服務(wù)層由PetStoreServiceImpl類和兩個(gè)數(shù)據(jù)訪問(wèn)對(duì)象JpaAccountDaoJpaItemDao類型(基于JPA對(duì)象關(guān)系映射標(biāo)準(zhǔn))組成,property name元素引用JavaBean屬性的名稱,ref元素引用另一個(gè)bean定義的名稱。idref元素之間的這種鏈接表示協(xié)作對(duì)象之間的依賴關(guān)系,有關(guān)配置對(duì)象依賴關(guān)系的詳細(xì)信息,請(qǐng)參見依賴關(guān)系。

組合基于XML的配置元數(shù)據(jù)

讓bean定義跨多個(gè)XML文件是很有用的,通常,每個(gè)多帶帶的XML配置文件表示體系結(jié)構(gòu)中的邏輯層或模塊。

你可以使用應(yīng)用程序上下文構(gòu)造函數(shù)從所有這些XML片段加載bean定義,這個(gè)構(gòu)造函數(shù)接受多個(gè)Resource位置,如前一節(jié)所示?;蛘?,使用一個(gè)或多個(gè)元素從另一個(gè)或多個(gè)文件加載bean定義,下面的例子說(shuō)明了如何做到這一點(diǎn):


    
    
    

    
    

在前面的示例中,外部bean定義從三個(gè)文件加載:services.xml、messageSource.xmlthemeSource.xml,所有位置路徑都相對(duì)于執(zhí)行導(dǎo)入的定義文件,因此services.xml必須與執(zhí)行導(dǎo)入的文件位于相同的目錄或類路徑位置,而messageSource.xmlthemeSource.xml必須位于導(dǎo)入文件位置下方的resources位置??梢钥吹剑懊娴男备鼙缓雎粤?,但是,由于這些路徑是相對(duì)的,所以最好不要使用斜杠,根據(jù)Spring Schema,導(dǎo)入的文件的內(nèi)容,包括頂層元素,必須是有效的XML bean定義。

它是可能的,但不推薦,在父目錄中引用文件使用一個(gè)相對(duì)"../“路徑,這樣做會(huì)創(chuàng)建對(duì)當(dāng)前應(yīng)用程序外部文件的依賴。特別地,這個(gè)引用不推薦用于classpath:url(例如,classpath:../services.xml),其中運(yùn)行時(shí)解析過(guò)程選擇“最近的”類路徑根,然后查看其父目錄,類路徑配置更改可能導(dǎo)致選擇不同的、不正確的目錄。

你總是可以使用完全限定的資源位置,而不是相對(duì)路徑:例如,file:C:/config/services.xmlclasspath:/config/services.xml,但是,請(qǐng)注意,你正在將應(yīng)用程序的配置耦合到特定的絕對(duì)位置。通常更可取的做法是為這些絕對(duì)位置保留一個(gè)間接的位置 — 例如,通過(guò)“${…?}”占位符,這些占位符在運(yùn)行時(shí)對(duì)JVM系統(tǒng)屬性解析。

名稱空間本身提供導(dǎo)入指令特性,除了普通bean定義之外,Spring提供的XML名稱空間的選擇還提供了其他配置特性 — 例如contextutil名稱空間。

Groovy Bean Definition DSL

作為外部化配置元數(shù)據(jù)的另一個(gè)示例,bean定義也可以用Spring的Groovy Bean Definition DSL表示,Grails框架中有這樣的定義,通常,這種配置存在于“.groovy”文件中,其結(jié)構(gòu)如下例所示:

beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}

這種配置風(fēng)格在很大程度上等同于XML bean定義,甚至支持Spring的XML配置名稱空間,它還允許通過(guò)importBeans指令導(dǎo)入XML bean定義文件。

使用容器

ApplicationContext是高級(jí)工廠的接口,該工廠能夠維護(hù)不同bean及其依賴項(xiàng)的注冊(cè)表,通過(guò)使用方法T getBean(String name, Class requiredType),可以檢索bean的實(shí)例。

ApplicationContext允許你讀取bean定義并訪問(wèn)它們,如下面的示例所示:

// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

// retrieve configured instance
PetStoreService service = context.getBean("petStore", PetStoreService.class);

// use configured instance
List userList = service.getUsernameList();

對(duì)于Groovy配置,引導(dǎo)看起來(lái)非常類似,它有一個(gè)不同的上下文實(shí)現(xiàn)類,它支持Groovy(但也理解XML bean定義),下面的示例顯示了Groovy配置:

ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");

最靈活的變體是GenericApplicationContext與reader委托相結(jié)合 — 例如,使用XmlBeanDefinitionReader來(lái)處理XML文件,如下例所示:

GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();

你還可以對(duì)Groovy文件使用GroovyBeanDefinitionReader,如下面的示例所示:

GenericApplicationContext context = new GenericApplicationContext();
new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy");
context.refresh();

你可以在相同的ApplicationContext上混合和匹配這樣的reader委托,從不同的配置源讀取bean定義。

然后可以使用getBean檢索bean的實(shí)例,ApplicationContext接口還有一些用于檢索bean的其他方法,但在理想情況下,應(yīng)用程序代碼不應(yīng)該使用它們。實(shí)際上,你的應(yīng)用程序代碼應(yīng)該完全不調(diào)用getBean()方法,因此完全不依賴于Spring API。例如,Spring與web框架的集成為各種web框架組件(如控制器和JSF管理的bean)提供了依賴注入,允許你通過(guò)元數(shù)據(jù)(如自動(dòng)裝配注解)聲明對(duì)特定bean的依賴。

上一篇:Spring IoC容器和bean介紹

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75750.html

相關(guān)文章

  • Spring Framework 參考文檔概述

    摘要:除此之外,還為不同的應(yīng)用程序體系結(jié)構(gòu)提供了基礎(chǔ)支持,包括消息傳遞事務(wù)數(shù)據(jù)和持久性以及,它還包括基于的框架,以及與之并行的反應(yīng)性框架。還支持依賴項(xiàng)注入和公共注解規(guī)范,應(yīng)用程序開發(fā)人員可以選擇使用這些規(guī)范,而不是提供的特定于的機(jī)制。 概述 Spring使創(chuàng)建Java企業(yè)應(yīng)用程序變得很容易,它提供了在企業(yè)環(huán)境中使用Java語(yǔ)言所需要的一切,支持Groovy和Kotlin作為JVM上的替代語(yǔ)言...

    silencezwm 評(píng)論0 收藏0
  • Spring Framework 參考文檔(Bean概述

    摘要:概述容器管理一個(gè)或多個(gè),這些是使用你提供給容器的配置元數(shù)據(jù)創(chuàng)建的例如,以定義的形式。在容器內(nèi)部,這些定義被表示為對(duì)象,其中包含其他信息以下元數(shù)據(jù)包限定的類名通常,定義的實(shí)際實(shí)現(xiàn)類。 Bean概述 Spring IoC容器管理一個(gè)或多個(gè)bean,這些bean是使用你提供給容器的配置元數(shù)據(jù)創(chuàng)建的(例如,以XML 定義的形式)。 在容器內(nèi)部,這些bean定義被表示為BeanDefinitio...

    luxixing 評(píng)論0 收藏0
  • Spring Framework 參考文檔Spring IoC容器和bean介紹)

    摘要:容器和介紹本章介紹了控制反轉(zhuǎn)原理的實(shí)現(xiàn),也稱為依賴注入。在中,構(gòu)成應(yīng)用程序主干并由容器管理的對(duì)象稱為,是由容器實(shí)例化組裝和管理的對(duì)象,否則,只是應(yīng)用程序中的許多對(duì)象之一,及其之間的依賴關(guān)系反映在容器使用的配置元數(shù)據(jù)中。 Spring IoC容器和bean介紹 本章介紹了控制反轉(zhuǎn)(IoC)原理的Spring Framework實(shí)現(xiàn),IoC也稱為依賴注入(DI)。它是一個(gè)過(guò)程,對(duì)象僅通過(guò)構(gòu)...

    tainzhi 評(píng)論0 收藏0
  • Spring Framework5.0.7【一】- 概述

    摘要:簡(jiǎn)單明了,如果婚介給我們的人選不符合要求,我們就會(huì)拋出異常。的一個(gè)重點(diǎn)是在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。切點(diǎn)通過(guò)一個(gè)條件來(lái)匹配要攔截的類,這個(gè)條件稱為切點(diǎn)。 特點(diǎn) 1. IOC/依賴注入 IOC就是一個(gè)負(fù)責(zé)控制管理對(duì)象生命周期和對(duì)象間關(guān)系的容器。IOC讓程序員用關(guān)注怎么去創(chuàng)建對(duì)象,不必再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫代碼,而是關(guān)注對(duì)象創(chuàng)建之后的...

    aaron 評(píng)論0 收藏0
  • #yyds干貨盤點(diǎn)# Spring Boot的前世今生以及它和Spring Cloud的關(guān)系詳解。

    摘要:經(jīng)過(guò)年時(shí)間的發(fā)展,到目前為止,最新穩(wěn)定版為版本。的發(fā)展剛出生的時(shí)候,引起了很多開源社區(qū)的關(guān)注,并且也有個(gè)人和企業(yè)開始嘗試使用。通過(guò)項(xiàng)目搭建過(guò)程來(lái)對(duì)比的差異和優(yōu)勢(shì)。當(dāng)然它的作用不僅于此,后續(xù)會(huì)逐步揭開它的真實(shí)面目。而和就相當(dāng)于當(dāng)年的和的關(guān)系。 要了解Spring Boot的發(fā)展背景,還得從2004年Spring ...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<