您的位置:首页 > 编程语言 > Java开发

Spring通过工厂方法配置 Bean

2018-06-01 22:47 351 查看

一、通过静态工厂方法配置bean

<!--
通过静态工厂方法配置bean,注意不是配置静态工厂方法实例,而是配置bean实例

class属性:指向静态工厂方法的全类名
factory-method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg配置参数
-->
<bean id="car" class="com.lh.factorybean.config.StaticCarFactory" factory-method="createCar">
<constructor-arg><value>ford</value></constructor-arg>
</bean>

package com.lh.factorybean.config;

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

import com.lh.factorybean.bean.Car;

/**
* @ClassName: StaticCarFactory
* @Description: Car静态工厂类,直接调用某一个类的静态方法就可以返回bean的实例
* @author Liu
* @date 2018年6月1日 下午10:12:08
*/
public class StaticCarFactory {
private static Map<String, Car> map = new HashMap<>();

static {
map.put("audi",new Car("Audi", 300000.0));
map.put("ford",new Car("Ford", 400000.0));
}

//静态工厂方法
public static Car createCar(String name) {
return map.get(name);
}
}

package com.lh.factorybean.bean;

/**
* @ClassName: Car
* @Description: Car定义
* @author Liu
* @date 2018年6月1日 下午9:22:17
*/
public class Car {
private String brand;

private Double price;

public Car() {
super();
}

public Car(String brand, Double price) {
this.brand = brand;
this.price = price;
}

public void setBrand(String brand) {
this.brand = brand;
}

public void setPrice(Double price) {
this.price = price;
}

@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + "]";
}

}


二、通过实例工厂方法配置bean

package com.lh.factorybean.config;

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

import com.lh.factorybean.bean.Car;

/**
* @ClassName: InstanceCarFactory
* @Description: 实例工厂的方法创建bean,即先需要创建工厂本身,再调用工厂的实例方法返回bean的实例
* @author Liu
* @date 2018年6月1日 下午10:31:45
*/
public class InstanceCarFactory {
private Map<String, Car> map = null;

public InstanceCarFactory() {
map = new HashMap<>();
map.put("audi", new Car("Audi", 300000.0));
map.put("ford", new Car("Ford", 400000.0));
}

public Car createCar(String name) {
return map.get(name);
}
}

<!-- 配置工厂的实例 -->
<bean id="carFactory" class="com.lh.factorybean.config.InstanceCarFactory"/>

<!-- 通过实例工厂方法来配置bean -->
<!--
通过静态工厂方法配置bean,注意不是配置静态工厂方法实例,而是配置bean实例

factory-bean属性:指向实例工厂方法的bean引用
factory-method:指向实例工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg配置参数
-->
<bean id="car2" factory-bean="carFactory" factory-method="createCar">
<constructor-arg><value>audi</value></constructor-arg>
</bean>


三、输出

package com.lh.factorybean;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* @ClassName: Main
* @Description: TODO
* @author Liu
* @date 2018年6月1日 下午9:30:37
*/
public class Main {

public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factorybean.xml");

System.out.println(ctx.getBean("car"));

System.out.println(ctx.getBean("car2"));

ctx.close();
}

}

Car [brand=Ford, price=400000.0]//静态工厂方法
Car [brand=Audi, price=300000.0]//实例工厂方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息