spring 通过工厂方法配置Bean
生活随笔
收集整理的這篇文章主要介紹了
spring 通过工厂方法配置Bean
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概要:
通過調用靜態工廠方法創建Bean
- 調用靜態工廠方法創建Bean是將對象創建的過程封裝到靜態方法中。當client須要對象時,僅僅須要簡單地調用靜態方法,而不用關心創建對象地細節。
- 要聲明通過靜態方法創建的Bean,須要在Bean地class屬性里指定擁有該工廠的方法的類,同一時候在factory-method屬性里指定工廠方法的名稱。最后,使用<constructor-arg>元素為該方法傳遞方法參數
通過調用實例工廠方法創建Bean
- 實例工廠方法:將對象的創建過程封裝到另外一個對象實例的方法里。當client須要請求對象時,僅僅須要簡單的調用該實例方法而不須要關心對象的創建細節
- 要聲明通過實例工廠方法創建的Bean
- 在bean的factory-bean屬性里指定擁有該工廠方法的Bean
- 在factory-method屬性里指定該工廠方法的名稱
- 使用construtor-arg元素為工廠方法傳遞方法參數
實例代碼具體解釋: 文件夾結構
Car.java package com.coslay.beans.factory;public class Car {private String brand;private double price;public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car [brand=" + brand + ", price=" + price + "]";}public Car() {System.out.println("Car's Constructor...");}public Car(String brand, double price) {super();this.brand = brand;this.price = price;}}
StaticCarFactory.java
package com.coslay.beans.factory;import java.util.HashMap; import java.util.Map;/** 靜態工廠方法:直接調用某一個類的靜態方法就能夠返回Bean的實例*/ public class StaticCarFactory {private static Map<String,Car> cars = new HashMap<String,Car>();static{cars.put("audi", new Car("audi",300000));cars.put("ford", new Car("ford",400000));}//靜態工廠方法public static Car getCar(String name){return cars.get(name);} }
InstanceCarFactory
package com.coslay.beans.factory;import java.util.HashMap; import java.util.Map;/**實例工廠方法:實例工廠的方法,即先須要創建工廠本身,再調用工廠的實例方法來返回bean的實例 */ public class InstanceCarFactory {private Map<String,Car> cars =null;public InstanceCarFactory(){cars = new HashMap<String,Car>();cars.put("audi", new Car("audi",300000));cars.put("ford",new Car("ford",400000));}public Car getCar(String brand){return cars.get(brand);}}
Main.java
package com.coslay.beans.factory;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");Car car1 = (Car) ctx.getBean("car1");System.out.println(car1);Car car2 = (Car) ctx.getBean("car2");System.out.println(car2);} }
beans-factory.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.xsd"><!-- 通過靜態工廠方法來配置bean,注意不是配置靜態工廠方法實例,而是配置bean實例 --><!-- class屬性:指向靜態工廠方法的全類名factory-method:指向靜態工廠方法的名字constructor-arg:假設工廠方法須要傳入參數,則使用constructor-arg來配置參數--><bean id="car1" class="com.coslay.beans.factory.StaticCarFactory"factory-method="getCar"><constructor-arg value="audi"></constructor-arg> </bean><!-- 配置工廠的實例 --><!-- class屬性:指向實例工廠方法的全類名factory-method:指向靜態工廠方法的名字constructor-arg:假設工廠方法須要傳入參數,則使用constructor-arg來配置參數--><bean id="carFactory" class="com.coslay.beans.factory.InstanceCarFactory"></bean><!-- 通過實例工廠方法來配置bean --><bean id="car2" factory-bean="carFactory" factory-method="getCar"><constructor-arg value="ford"></constructor-arg></bean> </beans>
總結
以上是生活随笔為你收集整理的spring 通过工厂方法配置Bean的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据导入HBase最常用的三种方式及实践
- 下一篇: linux下好用的软件