您当前的位置: 首页 >  容器

止步前行

暂无认证

  • 2浏览

    0关注

    247博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring IOC容器通过静态工厂方法和实例工厂方法获取Bean

止步前行 发布时间:2018-10-12 22:21:16 ,浏览量:2

一、引言

对于通过类名在配置文件中配置Bean是再普通不过的配置了,此处略过,主要介绍通过静态工厂方法和实例工厂方法从容器中获取Bean,下面直接上代码。

二、静态工厂方法 1、实体类
public class Car {

	private String brand;
	private String price;

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

	public String getBrand() {
		return brand;
	}

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

	public String getPrice() {
		return price;
	}

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

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

}
2、静态工厂类
public class StaticCarFactory {

	private static Map cars = new HashMap();

	static {
		cars.put("audi", new Car("audi", "300000"));
		cars.put("bens", new Car("bens", "400000"));
	}

	public static Car getCar(String name) {
		return cars.get(name);
	}

}
3、application.xml配置文件:

	

属性解释: class属性:指向静态工厂方法的全类名; factory-method: 指向静态工厂方法的名字; constructor-arg: 如果工厂方法需要传入参数,则使用constructor-arg来配置参数;

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

4、测试类:
public class Main {

	public static void main(String[] args) {

		ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml");

		Car car1 = (Car) apx.getBean("car1");
		System.out.println(car1);

	}
}
5、测试结果:

在这里插入图片描述

二、实例工厂方法 1、实体类同上: 2、实例工厂类:
public class InstanceCarFactory {

	private Map cars = null;

	public InstanceCarFactory() {
		cars = new HashMap();
		cars.put("BMW", new Car("BMW", "500000"));
		cars.put("Audi", new Car("Audi", "300000"));
	}

	public Car getCar(String name) {
		return cars.get(name);
	}

}
3、application.xml配置文件:


  


	

属性解释: factory-bean 属性:指向实例工厂方法的bean factory-method: 指向静态工厂方法的名字; constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数;

注意:即先需要创建工厂本身,再调用工厂的实例方法来返回bean的实例

4、测试类:
public class Main {

	public static void main(String[] args) {
	
		ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml");

		Car car2 = (Car) apx.getBean("car2");
		System.out.println(car2);
	
	}
}
5、测试结果:

在这里插入图片描述

关注
打赏
1657848381
查看更多评论
立即登录/注册

微信扫码登录

0.0405s