Car类 public class Car { private String brand; private double price; set和get方法.... public Car(String brand, double price) { super(); this.brand = brand; this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } } //实例工厂的方法,即先需要创建工厂本身,在调用工厂的实例方法来返回bean的实例 public class InstanceCarFactory { private Map<String, Car> cars=null; public InstanceCarFactory(){ cars=new HashMap<String, Car>(); cars.put("audi", new Car("audi", 30000)); cars.put("ford", new Car("ford", 400000)); } public Car getCar(String brand){ return cars.get(brand); } } //自定义的FactoryBean需要自定义FactoryBean的实现 public class CarFcatoryBean implements FactoryBean<Car> { private String brand; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } //返回bean的对象 @Override public Car getObject() throws Exception { return new Car("BMN",500000); } //返回bean的类型 @Override public Class<?> getObjectType() { return Car.class; } @Override public boolean isSingleton() { return true; } } xml配置 <!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 --> <!-- class 属性:指向静态工厂方法的全类名 factory-method : 指向静态工厂方法的名字 constructor-arg :如果工厂方法需要传入参数,则使用constructor-arg来配置参数。 --> <bean id="car1" class="com.wzq.spring.beans.factory.StaticCarFactory" factory-method="getCars"> <constructor-arg value="audi"></constructor-arg> </bean> <!-- 通过实例工厂方法来配置bean --> <!-- class 属性:指向实例工厂方法的bean factory-method : 指向静态工厂方法的名字 constructor-arg :如果工厂方法需要传入参数,则使用constructor-arg来配置参数。 --> <bean id="carFactory" class="com.wzq.spring.beans.factory.InstanceCarFactory"></bean> <!-- 通过实例 工厂方法来配置bean --> <bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="ford"></constructor-arg> </bean> Main方法 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); } } |
|