Spring-實現FactoryBean介面的方式配置Bean
阿新 • • 發佈:2019-01-03
•Spring 中有兩種型別的Bean,一種是普通Bean,另一種是工廠Bean,即FactoryBean.
•工廠 Bean 跟普通Bean不同,其返回的物件不是指定類的一個例項,其返回的是該工廠Bean的getObject方法所返回的物件
簡單案例:
Bean類:Car.java
CarFactoryBean.java/* * 檔名:Car.java * 版權:Copyright by www.huawei.com * 描述: * 修改人:Cuigaochong * 修改時間:2015-10-27 * 跟蹤單號: * 修改單號: * 修改內容: */ package com.cgc.spring.beans.factorybean; /** * <一句話功能簡述> * <功能詳細描述> * * @author 姓名 工號 * @version [版本號, 2015-10-27] * @see [相關類/方法] * @since [產品/模組版本] */ public class Car { public Car() { System.out.println("Car construct"); } private String brand; private double price; public Car(String brand, double price) { super(); this.brand = brand; this.price = 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; } }
applicationContext_Factorybean.xml/* * 檔名:CarFactoryBean.java * 版權:Copyright by www.huawei.com * 描述: * 修改人:Cuigaochong * 修改時間:2015-10-28 * 跟蹤單號: * 修改單號: * 修改內容: */ package com.cgc.spring.beans.factorybean; import org.springframework.beans.factory.FactoryBean; /** * <一句話功能簡述> * <功能詳細描述> * * @author 姓名 工號 * @version [版本號, 2015-10-28] * @see [相關類/方法] * @since [產品/模組版本] */ public class CarFactoryBean implements FactoryBean<Car> { private String brand; /** * 設定 brand * @param 對brand進行賦值 */ public void setBrand(String brand) { this.brand = brand; } /** * 過載方法 返回bean的物件 * @return * @throws Exception */ @Override public Car getObject() throws Exception { // TODO Auto-generated method stub return new Car(brand ,50000); } /** * 過載方法 返回bean的型別 * @return */ @Override public Class<?> getObjectType() { // TODO Auto-generated method stub return Car.class; } /** * 過載方法 * @return */ @Override public boolean isSingleton() { // TODO Auto-generated method stub return true; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 通過Factory來配置Bean的例項 class:指向FactoryBean的全類名 property:配置FactoryBean的屬性 但實際返回的卻是FactoryBean的getObejct()方法返回的例項 --> <bean id="car" class="com.cgc.spring.beans.factorybean.CarFactoryBean"> <property name="brand" value="BMW"></property> </bean> </beans>