Spring Bean介紹

Spring Bean介紹

一個Spring IoC容器管理一個或者多個beans。這些beans依據你填充在容器中的元數據配置創建,如以XML中的

Bean命名

每個bean都有一個或者多個標識符,這些標識符在容器中都必須是惟一的。通學一個bean僅有一個標識符,但是如果需要多個,其他的則可以使用別名(aliases)。

在基於XML的元數據配置,你可以使用id或者name屬性來指定bean的標識符。id屬性只允許明確的指定一個bean標識符,如果想要給bean指定多個別名,則可以在name屬性中指定他們,以逗號或者分號或者空格分隔。如果ID和name不指定,則容器自動生成。

同進還可以在bean定義之外給bean起別名,如下:

<alias name="fromName" alias="toName"/>

實例化beans

一個bean定義本質上是創建一個或者多個對象的圖譜,當請求bean實例時容器查找對應名字的bean定義,依據bean定義組裝或者創建一個真正的對象。

如果使用的是基於XML的配置,你可以通過bean標籤的class屬性指定bean定義所要初始化的對象類型(type或者class),此class屬性在BeanDefinition實例內部是一個Class類型的屬性,是必須指定的。

普通bean實例化

對於一般的bean,如下定義即可正常初始化:

<bean id="exampleBean" class="examples.ExampleBean"/>

<bean name="anotherExample" class="Examples.ExampleBeanTwo"/>

通過靜態工廠方法實例化bean

當定義一個由靜態工廠方法創建的bean定義時,你需要給bean標籤的class屬性指定含有靜態工廠方法的類的類名,同時給bean標籤的factory-method屬性指定創建實例所用的方法(必須爲靜態方法)。如下是通過createInstance方法實例化一個對象:

<bean id="clientService" class="examples.ClientService" factory-method="createInstance"/>

對應工廠如下:

public class ClientService{
    private static ClientService clientService = new ClientService();

    private ClientService(){}

    public static ClientService createInstance(){
        return clientService;
    }
}   

通過實例工廠方法實例化Bean

同靜態工廠方法類似,不同之處再於實例化工廠方法時需先定義工廠的初始化定義,然後定義需要創建bean的定義如下:

<!-- 工廠定義 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator"/>

<bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance"/>

<bean id="accountService" factory-bean="serviceLocator" factory-method="createAccountServiceInstance"/>

對應工廠如下:

public class DefaultServiceLocator{
    private static ClientService clientService = new ClientServiceImpl();
    private static AccountService accountService = new AccountServiceImpl();

    private DefaultServiceLocator(){}

    public ClientService createClientServiceInstance(){
        return clientService;
    }

    public AccountService createAccountServiceInstance(){
        return accountService;
    }
}
發佈了42 篇原創文章 · 獲贊 10 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章