一、引言
对于通过类名在配置文件中配置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、测试结果:
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、测试结果: