一,通過constructor實例化bean
Spring可以實例化各種類型的類,不要求必須是JavaBean類型的類。在XML中配置類如下:
<bean id="exampleBean" class="examples.ExampleBean"/> <bean name="anotherExample" class="examples.ExampleBeanTwo"/>
二,通過靜態factory method實例化bean
當通過靜態factory method實例化bean時,需要用class屬性來指定含有靜態factory method的類,用factory-method屬性來指定對應的factory method。當調用這一方法時,將返回一個類的對象,效果和通過constructor來實例化相同。注意,對應的factory method必須是static方法。
<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; } }
三,通過實例factory method來實例化bean
與通過靜態factory method實例化bean的方法類似,區別是,通過實例factory method來實例化bean需要調用容器中另一個bean的非靜態方法。使用這種方式時,class屬性不需要填寫,在factory-bean屬性中制定容器中包含指定factory method的bean,在factory-method屬性中設置factory method的名稱。
<!-- the factory bean, which contains a method called createInstance() --> <bean id="serviceLocator" class="examples.DefaultServiceLocator"> <!-- inject any dependencies required by this locator bean --> </bean> <!-- the bean to be created via the factory bean --> <bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance"/>
public class DefaultServiceLocator { private static ClientService clientService = new ClientServiceImpl(); private DefaultServiceLocator() {} public ClientService createClientServiceInstance() { return clientService; } }
一個factory類可以包含多個factory method。
<bean id="serviceLocator" class="examples.DefaultServiceLocator"> <!-- inject any dependencies required by this locator bean --> </bean> <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; } }