成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

huashiou / 1741人閱讀

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

容器概述

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

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

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

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

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

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

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

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

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

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

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

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

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

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




       
        
    

    
        
    

    

id屬性是標識單個bean定義的字符串。

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

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

實例化一個容器

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

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

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




    

    
        
        
        
    

    

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




    
        
    

    
        
    

    

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

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

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

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


    
    
    

    
    

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

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

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

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

Groovy Bean Definition DSL

作為外部化配置元數(shù)據(jù)的另一個示例,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
        }
    }
}

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

使用容器

ApplicationContext是高級工廠的接口,該工廠能夠維護不同bean及其依賴項的注冊表,通過使用方法T getBean(String name, Class requiredType),可以檢索bean的實例。

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

// 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();

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

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

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

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

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

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75750.html

相關(guān)文章

  • Spring Framework 參考文檔概述

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

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

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

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

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

    tainzhi 評論0 收藏0
  • Spring Framework5.0.7【一】- 概述

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

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

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

    番茄西紅柿 評論0 收藏2637

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<