Spring實例化bean的幾種方式


一,通過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;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM