1. 程式人生 > >Spring學習筆記 使用Static Factory(靜態工廠類)建立Bean

Spring學習筆記 使用Static Factory(靜態工廠類)建立Bean

普通定義Bean並且進行初始化的方法一般通過property(屬性)的setter方法或者構造方法進行。例如

<bean id="beanName" class="com.csdn.net.arvin.BeanClass" >
    <constructor-arg value="***" />
    <property name="propertyOne" value="" />
</bean>

這種定義建立Bean相當於使用new  com.csdn.net.arvin.BeanClass(); 的方法來新建Bean物件。在實際應用中很多情況下還會使用設計模式中的工廠模式來建立物件。使用靜態工廠類即呼叫工廠類中的靜態方法,比如public static 類名 getInstance()方法返回根據getInstance()方法內部邏輯判斷後建立的我們實際需要的物件。

以下為完整的通過XML配置檔案配置,在Spring中使用工廠類建立我們需要的Bean物件的Demo

 這樣的好處顯而易見,即使實際獲取的MailConfig型別物件發生了變化,main方法中的程式碼也不需要進行變動。

程式碼如下:

MAIN方法類:

package factorybean;

import injection.MailConfig;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FactoryBeanMain
{
    public static void main(String[] args)
    {
        String springConfig = "factorybean/spring-config.xml";
        ApplicationContext context = 
                new ClassPathXmlApplicationContext(springConfig);
        MailConfig mailConfig = 
                context.getBean("mailConfig", MailConfig.class);
        mailConfig.doIt();
    }
}


Spring-config.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 id="mailConfig" class="factorybean.StaticMailConfigFactory"
	factory-method="getMailConfig">
		<constructor-arg value="companyTwo" />
	</bean>
</beans>


靜態工廠類:

package factorybean;

import injection.MailConfig;

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


MailConfig介面:

package injection;

public interface MailConfig
{
    public void doIt();
}

實現MailConfig介面的MailConfigOfCompanyOne類 :

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyOne implements MailConfig
{

    @Override
    public void doIt()
    {
        System.out.print("companyOne's mailConfig is created.");
    }

}


實現MailConfig介面的MailConfigOfCompanyTwo類:

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyTwo implements MailConfig
{

    @Override
    public void doIt()
    {
        System.out.print("companyTwo's mailConfig is created.");
    }

}

相關推薦

Spring學習筆記 使用Static Factory靜態工廠建立Bean

普通定義Bean並且進行初始化的方法一般通過property(屬性)的setter方法或者構造方法進行。例如 <bean id="beanName" class="com.csdn.net.arvin.BeanClass" > <construct

HTML學習筆記 css定位靜態,相對,固定,絕對布局偏移案例 第十二節 原創 參考使用表

absolute write style 用戶 學習 nbsp -c code posit <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"

15.Spring學習筆記_AOP基礎by尚矽谷_佟剛

什麼是AOP   需求1-日誌:在程式執行期間追蹤正在發生的活動  需求2-驗證:希望計算器只能處理正數的運算 程式碼實現片段  問題  程式碼混亂:越來越多的非業務需求(日誌和驗證等)加入

設計模式C++學習筆記之十三Decorator裝飾模式

com img c++ 進行 done 設計 out set 筆記 裝飾模式,動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。 13.1.解釋 main(),老爸 ISchoolReport,成績單接口 CFourthGrad

python學習筆記之socket第七天

.cn 七天 就是 模塊 AR 操作 alt 分享圖片 python學習 參考文檔: 1、金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html

python的學習筆記/002-12018-5-18

python1.模塊初始化1) getpass 模塊程序實例:import getpass_password=‘penny‘_password=‘abc123’passname=input(passname:)password=getpass.getpass("password:")

python的學習筆記/002-22018-5-19

Python學習3.1內建類型3.1.1數值類型 數值類型 整數類型 浮點類型 布爾型 復數 int long float bool complex 1) 整數類型從Python 3以後,整數類型為int,不再區分整數與長整數(在Python 2.x 中分別有int和long類型

python的學習筆記/002-42018-5-20

元組(tuple)的操作及購物車元組及其操作元組在很多地方與列表很像,都是有序的,都可以通過[]指定索引來獲取元素,不過元組創建好之後就不可以變動。 names=(‘sheldon‘,‘penny‘,‘leonard‘) print(names) print(names[1]) # 切 print(name

python的學習筆記/002-32018-5-20

列表(list)的常見操作群集類型 群集類型 列表 元組 字典 集合 list tuple dict set 1.列表列表的類型是list,特點為有序,具備索引,內容與長度可以變動。要創建列表,可以使用[]直接表示法,列表中每個元素使用逗號分隔開。列表的常見操作(1) 元素的切片

python的學習筆記/002-52018-5-21

字典(dict)及其操作字典及其操作字典是用來存儲倆倆對應的鍵與值,即為dict類型;創建字典時,每個鍵會用來獲取對應的值,字典中的鍵不能重復;其特點是key-value 鍵值類型,無序的,沒有下標不能通過下標查找。(1)字典的替換,增,刪,查找 infor={ ‘2014132001‘:"DiaoC

《第一行程式碼》學習筆記——探究活動未完待續

《第一行程式碼》學習筆記 一、探究活動 手動建立活動,不勾選 Generate Layout File 和 Launcher Activity 重寫onCreate()方法(每個活動都應該重寫) protected void onCreate(Bundle savedInsta

《第一行代碼》學習筆記——探究活動未完待續

over 技術分享 android save 標題欄 toa ack cat name 《第一行代碼》學習筆記 一、探究活動 手動創建活動,不勾選 Generate Layout File 和 Launcher Activity 重寫onCreate()方法(每個活

簡單工廠模式靜態工廠模式深入理解 完全剖析

以下是原作的內容,我記錄下來僅供日後複習方便。 /*仔細閱讀了一下閻巨集的《java與模式》中的簡單工廠模式一章,又結合網上的搜尋結果,寫下自己對簡單工廠的理解,希望大家多多批評指正。什麼是簡單工廠模式呢?  * 簡單工廠模式:是類的建立模式,要叫做靜態方法模式,簡單

資料庫概論學習筆記 其六關係資料理論

屬性間的聯絡 1.一對一聯絡 2.一對多聯絡 3.多對多聯絡 資料依賴 是一個關係內部屬性與屬性之間的一種約束關係 是現實世界屬性間相互聯絡的抽象 是資料內在的性質 是語義的體現 1.函式依賴 2.多值依賴 例:描述一個學生關係,可以有學號、姓名、系名等屬

LTE學習筆記之CSIChannel State Information

基本概念 CSI 是通道狀態資訊, Channel Status Information, 它是一個衡量通道好壞的指標。  有三個引數:CQI,PMI和RI。根據網路狀態和配置,這三個引數通過不同形式的組合成為CSI上報,不一定三個引數全都上上報。 FAQ CSI是一個很複

簡單工廠模式靜態工廠模式

一、模式分析 將物件的建立和物件本身業務處理分離可以降低系統的耦合度,使得兩者修改起來都相對容易。  在呼叫工廠類的工廠方法時,由於工廠方法是靜態方法,使用起來很方便,可通過類名直接呼叫,而且只需要傳入一個簡單的引數即可,在實際開發中,還可以在呼叫時將所傳入的引數儲存在XML等格式

Socket學習筆記之二常用基本函式

函式:u_long htonl(u_long hostlong)u_short htons(u_short hostshort)u_long ntohl(u_long netlong)u_short ntohs(u_short netshort)這上面四個函式類似,功能相似,都用來轉換資料格式。用

學習筆記--C++過載引數多型的實現機制

C++繼承了C的全部特性,對C實現了全面相容。C++又實現了一些新的特性,比如說函式的過載。 要實現函式的過載就要改變原有的在C中函式定義的機制,在C中定義函式fun(int a,int b),編譯器會把_fun寫入符號庫中,使用fun()時會在符號庫中找到_fun,並呼叫。 在C++中,由於要實現過載,

卷積神經網路學習筆記——Siamese networks孿生神經網路

完整程式碼及其資料,請移步小編的GitHub地址   傳送門:請點選我   如果點選有誤:https://github.com/LeBron-Jian/DeepLearningNote   在整理這些知識點之前,我建議先看一下原論文,不然看我這個筆記,感覺想到哪裡說哪裡,如果看了論文,還有不懂的,正好這篇部落

11Spring學習記錄---Spring_bean靜態,例項工廠與FactoryBean建立Bean

通過靜態工廠方法建立bean 1.Car.class  private String band; private double price; public Car(String band, double price) { super(); this.ban