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;
}
}