Spring學習筆記 使用Non-Static Factory(非靜態工廠類)創建Bean


同上一篇中靜態工廠類創建Bean類似,唯一不同的是工廠類中獲取實際對象的方法比如:getInstance() 不是靜態方法(non-static)。

工廠類代碼:

package factorybean;

import injection.MailConfig;

public class NonStaticMailConfigFactory
{
    public MailConfig getMailConfig(String mailServiceProvider)
    {
        if ("companyOne".equals(mailServiceProvider))
            return new MailConfigOfCompanyOne();
        if ("companyTwo".equals(mailServiceProvider))
            return new MailConfigOfCompanyTwo();
        return null;
    }
}


這個工廠類的方法與上一篇靜態工廠類創建Bean中的工廠類中獲取對象方法唯一區別就是它不是static的。

相對於使用static方法的工廠類,非靜態工廠類在Spring的XML配置也有一點不同。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!--     先定義工廠類的Bean -->
	<bean id="mailConfigFactory" class="factorybean.StaticMailConfigFactory" />
<!-- 	這裏factory-bean標籤屬性取上邊定義的工廠類的Bean的Id,然後通過factory-method標籤屬性定義此工廠類中用於獲取對象的非靜態方法 -->
	<bean name="mailConifg"
	   factory-bean="mailConfigFactory"
	   factory-method="getMailConfig"
		<constructor-arg value="companyTwo" />
<!-- 	如上,仍然使用constructor-arg標籤定義工廠類獲取對象方法的參數 -->
</bean>
</beans>


靜態方法工廠類創建Bean中有比較詳細的完整代碼參考:http://blog.csdn.net/arvinrong/article/details/7734709

 Client代碼中獲取該類的方法仍沒有改變:

 MailConfig mailConfig = context.getBean("mailConfig", MailConfig.class);


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章