天天看點

spring core 筆記(一)

    中繼資料的配置,一般來說可以分為三種方式:最簡單直接的就是使用xml配置檔案,另外兩個就是spring注解配置與使用java注解的配置。這次我們先從xml開始談起,逐漸進行深入。

    在xml裡,使用<bean>和</bean>來定義一個中繼資料。一般來說,你可以定義service層的對象,data access 對象,表示層對象(如 Structs Action)等等。如下,給出了xml配置的中繼資料的基本結構:

    在spring裡,最經典的容器就是ApplicationContext,其初始化如下:

    當中service.xml服務層對象執行個體如下:

    接着就是daos.xml資料通路對象:

    在上面的Demo裡,服務層對象是PetStoreServiceImpl類對象,兩個data access對象分别是SqlMapAccountDao和SqlMapItemDao類對象,這兩個data access對象都是基于iBatics ORM架構的。

    如果有多個xml中繼資料的配置檔案,可以将他們組合成一個基于xml的配置檔案,如下:

如上,加載了三個外部檔案,services.xml , messageSource.xml 和 themeSource.xml,其中services.xml必須在classpath路徑下,而messageSource.xml和themeSource.xml則需要在resources檔案夾下。

    所有配置的最終目的都是為了使用,現在來看一下如何使用容器ApplicationContext。ApplicationContext在維護一個各個Bean和其依賴項的系統資料庫。使用方法T getBean(String name,Class<T> requiredType>,可以獲得對應Bean的執行個體。如下:

二、Bean的概覽

    ioc容器管理着一個或多個bean。這些bean都可以通過指定的配置方式,提供給ioc容器。如上文談到的xml的配置方式<bean/>

    相對于容器本身來說,這些bean都會作為 BeanDefinition 的對象,一般包含了以下中繼資料:

全限定名(包+類名):java bean 類名

bean的行為:指定了bean在容器裡的行為,包括作用域 scope,生命周期的回調方法等等

bean的依賴對象

其他屬性配置:如連接配接池的連接配接數量

    如下,是一些常用的bean屬性:class,name,scope,constructor arguments,properties,autowiring mode,lazy-initialization mode,initialization method,destruction method。

    1、命名Bean

    在xml配置檔案裡,可以使用屬性 id 或 name 來命名一個bean。當中 id 是bean的唯一标志名,在整個 xml 文檔中唯一。屬性 name 用來為 id 指定一個或多個别名,多個别名之間用逗号”,“,分号”;“或者空格來分開。

    當你沒有為bean 指定 id 或 name 時,容器會自動為此bean 指定一個唯一的标志名。當然了,如果你需要 ref 指向此 bean ,就必須為其指定一個name

    2、bean 的别名

    3、執行個體化 bean

     spring 提供了三種方式執行個體化一個 bean。基于xml配置的,可以使用類構造器,靜态工廠方法,執行個體工廠方法

    使用類構造器執行個體化bean,如下:

使用靜态工廠方法

     靜态工廠方法要求類需要包含一個靜态工廠方法, 同時需要再xml配置檔案裡指定工廠方法,如下:(createInstance 必須是static方法)

    ClientService類設計如下:

執行個體工廠方法

    與靜态工廠方法類似,執行個體化工廠方法是使用容器裡已存在 factory bean 的非靜态方法來執行個體化一個新bean。使用這種方式執行個體化bean,應該将屬性 name 設定為空,設定 factory-bean指定factoryBean,屬性 factory-method指定執行個體化方法,如下:

    DefaultServiceLocator設計如下:

    深入一點談就是,一個factory bean可以有多個工廠方法,如下:

本文轉自peiquan 51CTO部落格,原文連結:http://blog.51cto.com/peiquan/1305254