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 + "]"; } } //實(shí)例工廠的方法,即先需要?jiǎng)?chuàng)建工廠本身,在調(diào)用工廠的實(shí)例方法來返回bean的實(shí)例 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的實(shí)現(xiàn) public class CarFcatoryBean implements FactoryBean<Car> { private String brand; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } //返回bean的對(duì)象 @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配置 <!-- 通過靜態(tài)工廠方法來配置bean,注意不是配置靜態(tài)工廠方法實(shí)例,而是配置bean實(shí)例 --> <!-- class 屬性:指向靜態(tài)工廠方法的全類名 factory-method : 指向靜態(tài)工廠方法的名字 constructor-arg :如果工廠方法需要傳入?yún)?shù),則使用constructor-arg來配置參數(shù)。 --> <bean id="car1" class="com.wzq.spring.beans.factory.StaticCarFactory" factory-method="getCars"> <constructor-arg value="audi"></constructor-arg> </bean> <!-- 通過實(shí)例工廠方法來配置bean --> <!-- class 屬性:指向?qū)嵗S方法的bean factory-method : 指向靜態(tài)工廠方法的名字 constructor-arg :如果工廠方法需要傳入?yún)?shù),則使用constructor-arg來配置參數(shù)。 --> <bean id="carFactory" class="com.wzq.spring.beans.factory.InstanceCarFactory"></bean> <!-- 通過實(shí)例 工廠方法來配置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); } } |
|