二、通過工廠方法來配置bean

調用靜態工廠方法創建 Bean是將對象創建的過程封裝到靜態方法中. 當客戶端需要對象時, 只需要簡單地調用靜態方法, 而不同關心創建對象的細節.
要聲明通過靜態方法創建的 Bean, 需要在 Bean 的 class 屬性里指定擁有該工廠的方法的類, 同時在 factory-method 屬性里指定工廠方法的名稱. 最后, 使用 <constrctor-arg> 元素為該方法傳遞方法參數.

實例工廠方法: 將對象的創建過程封裝到另外一個對象實例的方法里. 當客戶端需要請求對象時, 只需要簡單的調用該實例方法而不需要關心對象的創建細節.
要聲明通過實例工廠方法創建的 Bean
在 bean 的 factory-bean 屬性里指定擁有該工廠方法的 Bean
在 factory-method 屬性里指定該工廠方法的名稱
使用 construtor-arg 元素為工廠方法傳遞方法參數


<?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.xsd">
    <!--
        通過靜態工廠方法來配置bean,注意不是配置靜態工廠實例,而是配置bean實例
        class:指向靜態工廠的全類名
        factory-method:指向靜態工廠方法的名字
        constructor-arg:如果靜態工廠方法需要傳入參數,則使用constructor-arg來配置參數
    -->
    <bean id="car1" class="com.xiya.spring.beans.factory.StaticCarFactory" factory-method="getCar">
        <constructor-arg value="Ford"/>
    </bean>

    <!--配置工廠的實例-->
    <bean id="instanceCarFactory" class="com.xiya.spring.beans.factory.InstanceCarFactory"/>
    <!--
        通過實例工廠方法來配置bean
        factory-bean:指向實例工廠的bean
    -->
    <bean id="car2" factory-bean="instanceCarFactory" factory-method="getCar">
        <constructor-arg value="BMW"/>
    </bean>
</beans>

package com.xiya.spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 實例工廠方法:實例工廠的方法,即需要先創建工廠本身,再調用工廠的實例方法來返回bean實例
 * Created by N3verL4nd on 2017/3/20.
 */
public class InstanceCarFactory {private Map<String, Car> cars;

    public InstanceCarFactory() {cars = new HashMap<>();
        cars.put("audi", new Car("audi", 300000));
        cars.put("BMW", new Car("BMW", 500000));
        cars.put("Ford", new Car("Ford", 200000));
    }public Car getCar(String brand) {return cars.get(brand);
    }
}


package com.xiya.spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 靜態工廠方法:直接調用一個類的靜態方法就可以返回 bean 的實例
 * Created by N3verL4nd on 2017/3/20.
 */
public class StaticCarFactory {private static Map<String, Car> cars = new HashMap<>();

    static {cars.put("audi", new Car("audi", 300000));
        cars.put("BMW", new Car("BMW", 500000));
        cars.put("Ford", new Car("Ford", 200000));
    }//靜態工廠方法
    public static Car getCar(String brand) {return cars.get(brand);
    }public static void main(String[] args) {}
}


package com.xiya.spring.beans.factory;

/**
 * Created by N3verL4nd on 2017/3/20.
 */
public class Car {private String brand;
    private int price;

    public Car() {}public Car(String brand, int price) {this.brand = brand;
        this.price = price;
    }public String getBrand() {return brand;
    }public void setBrand(String brand) {this.brand = brand;
    }public int getPrice() {return price;
    }public void setPrice(int price) {this.price = price;
    }@Override
    public String toString() {return "Car{" +"brand='" + brand + '\'' +", price=" + price +'}';
    }
}

package com.xiya.spring.beans.factory;

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

/**
 * Created by N3verL4nd on 2017/3/20.
 */
public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans-factory.xml");
        Car car1 = (Car) context.getBean("car1");
        System.out.println(car1);

        Car car2 = (Car) context.getBean("car2");
        System.out.println(car2);
    }
}

輸出:

Car{brand='Ford', price=200000}
Car{brand='BMW', price=500000}


轉載于:https://www.cnblogs.com/lgh1992314/p/6616214.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284217.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GlobalMapper精品教程】019:基于DSM提取離散隨機點的高程信息

本文講解在globalmapper中,基于DSM提取離散隨機點的高程信息,配套數據為data019.rar。 文章目錄 1. 離散點創建2. 提取離散點高程信息3. 高程標注1. 離散點創建 本文在ArcGIS中,根據給定的范圍,隨機生成離散點,如下圖: 拓展閱讀: ArcGIS根據范圍創建隨機點教程:【ArcG…

shell腳本注意點

2019獨角獸企業重金招聘Python工程師標準>>> 直接命令行寫腳本的時候&#xff0c;可以用 ; 分割&#xff0c;或 也可以直接回車&#xff0c;然后在繼續寫腳本在使用 方括號[ ] 的時候&#xff0c;里面空格兩邊都必須要有空格&#xff0c;比如 [ $a -gt 3 ] 在方括號…

C語言編程規范--------2 注釋

2.1 注釋的原則 注釋的目的是解釋代碼的目的、功能和采用的方法&#xff0c;提供代碼以外的信息&#xff0c;幫助讀者理解代碼&#xff0c;防止沒必要的重復注釋信息。 示例&#xff1a;如下注釋意義不大。 /* if receive_flag is TRUE */ if (receive_flag) 而如下的注釋則給出…

備戰金九銀十:RabbitMQ有5種工作模式(6)

RabbitMQ是實現了高級消息隊列協議&#xff08;AMQP&#xff09;的開源消息代理軟件&#xff08;亦稱面向消息的中間件&#xff09;。RabbitMQ服務器是用Erlang語言編寫的&#xff0c;而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客…

【GlobalMapper精品教程】020:Lidar點云數據分類(自動分類、手動分類)案例詳解

航測點云通常跟DSM一致,即包含植被、房屋等信息,必須進行點云分類、過濾,才能生成準確的高程點、等高線和DEM等地形數據。本文以案例的形式詳細講解globalmapper23中點云工具及使用方法。 文章目錄 1. 點云分類2. 創建地面高程格網3. 地形繪制4. 格網轉點云5. 點云抽稀6. 點…

社交網絡圖中結點的“重要性“計算(Dijkstra + SPFA + Floyd + 模板)

題目鏈接&#xff1a; 無 題目大意&#xff1a; 求一個點到其他所有點的最短距離和&#xff0c;保證圖連通。 解題過程&#xff1a; 剛開始用 Floyd 水過的&#xff0c;后來用換了幾種方法&#xff0c;不錯的模板題&#xff0c;Floyd 的時候&#xff0c;要用 vector 存邊&#…

web布局固定寬度+變化寬度實現思路

前言 頁面當中常規布局我想大家都會的&#xff0c;但有些布局是常規布局中實現不了的&#xff0c;比如變寬和固寬結合的&#xff0c;需要實現(300px)&#xff0b;(100%&#xff0d;300px)的兩列布局。以下樣式代碼前提均為盒模型為border-sizing 的前提下。 html部分 <div c…

CSS3 nth 偽類選擇器

考察下面的 HTML 代碼片段&#xff1a; <div><section>section 1</section><section>section 2</section><ul><li>item 1</li><li><ul><li>sub item 1</li><li>sub item 2</li><li>…

RedisCluster的安裝、部署、擴容和 Java客戶端調用

Redis下載 官網地址&#xff1a;http://redis.io/ 中文官網地址&#xff1a;http://www.redis.cn/ 下載地址&#xff1a;http://download.redis.io/releases/ 安裝 # &#xff08;三臺&#xff09;安裝 C 語言需要的 GCC 環境 yum install -y gcc-c yum install -y wget # 下…

【CloudCompare教程】001:CloudCompare中文版下載與安裝圖文教程

CloudCompare是一款功能強大的點云后處理軟件,本文講解CloudCompare中文版下載與安裝方法。 文章目錄 一、CloudCompare下載地址二、CloudCompare安裝教程三、CloudCompare中文設置一、CloudCompare下載地址 官方下載地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

ML.NET相關資源整理

在人工智能領域&#xff0c;無論是機器學習&#xff0c;還是深度學習等&#xff0c;Python編程語言都是絕對的主流&#xff0c;盡管底層都是C實現的&#xff0c;似乎人工智能和C#/F#編程語言沒什么關系。在人工智能的工程實現&#xff0c;通常都是將Python訓練好的人工智能模型…

帶參數的宏替換

帶參數的宏替換因各種需求疊加&#xff0c;替換規則很怪異&#xff1a; 1、首先將實參替換形參&#xff0c;并展開宏 2、如果1步展開后&#xff0c;有#或者##&#xff0c;那么停止替換。 3、如果1步展開后&#xff0c;沒有#或者##&#xff0c;且參數也是宏&#xff0c;那么繼續…

JAVA學習日志(7-1-繼承)

為什么80%的碼農都做不了架構師&#xff1f;>>> 繼承 1.提高代碼復用性 2.讓類與類之間產生關系&#xff0c;有了這個關系才有了多態的特性 **不要為了獲取其他類的功能&#xff0c;簡化代碼而繼承&#xff0c; 必須是類與類之間有所屬關系才可以繼承&#xff0c;所…

BZOJ 1370: [Baltic2003]Gang團伙 [并查集 拆點 | 種類并查集WA]

題意&#xff1a; 朋友的朋友是朋友&#xff0c;敵人的敵人是朋友&#xff1b;朋友形成團伙&#xff0c;求最多有多少團伙 種類并查集WA了一節課&#xff0c;原因是&#xff0c;只有那兩種關系才成立&#xff0c;諸如朋友的敵人是朋友之類的都不成立&#xff01; 所以拆點做吧 …

常見Lidar點云數據處理及可視化軟件匯總

常見的點云處理及可視化軟件有&#xff1a; CloudCompare、Globalmapper、Pix4d、ArcGIS&#xff08;Pro&#xff09;、Lidar 360、PCL等等。 文章目錄1. CloudCompare2. Globalmapper3. Pix4d4. ArcGIS&#xff08;Pro&#xff09;5. Lidar 3606. PCL1. CloudCompare CloudCo…

Spring 自帶工具類匯總

斷言 斷言是一個邏輯判斷&#xff0c;用于檢查不應該發生的情況 Assert 關鍵字在 JDK1.4 中引入&#xff0c;可通過 JVM 參數-enableassertions開啟 SpringBoot 中提供了 Assert 斷言工具類&#xff0c;通常用于數據合法性檢查 // 要求參數 object 必須為非空&#xff08;Not…

解決new Thread().Start導致高并發CPU 100%的問題

背景之前接手一個項目的時候&#xff0c;發現到處是new Thread(()>{ //do something }).Start();這么做的目的&#xff0c;無非是為了減少頁面等待時間提高用戶體驗&#xff0c;把一些浪費時間的操作放到新線程中在后臺運行。問題但是這樣帶來的問題是大量的創建線程&#x…

基于 HTML5 Canvas 繪制的電信網絡拓撲圖

電信網結構&#xff08;telecommunication network structure&#xff09;是指電信網各種網路單元按技術要求和經濟原則進行組合配置的組合邏輯和配置形式。組合邏輯描述網路功能的體系結構&#xff0c;配置形式描述網路單元的鄰接關系&#xff0c;即以交換中心&#xff08;或節…

網絡相關配置,SSH服務,bash, 元字符

作業一&#xff1a;臨時配置網絡&#xff08;ip&#xff0c;網關&#xff0c;dns&#xff09;永久配置 設置IP和掩碼ifconfig eth0 192.168.2.2 netmask 255.255.255.0設置網關route add default gw 192.168.2.10[rootbogon ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0…