Spring 通过工厂方法配置Bean
通过调用静态工厂方法创建Bean:
--调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户需要对象时,只需要简单的调用静态方法,而不关心创建对象的细节。
--要声明通过静态方法创建Bean,需要在Bean的class属性中指定拥有该工厂的方法的类,同时在factory-mothod属性里指定工厂方法的名称,最后,使用<constrctor-arg>元素为该方法传递方法参数。
实例:
car类:
package com.demo.factory; public class Car { private String cname; private double price; public Car(){ } public Car(String cname,double price){ this.price = price; this.cname = cname; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [cname=" + cname + ", price=" + price + "]"; } }
静态工厂类:
package com.demo.factory; import java.util.HashMap; import java.util.Map; /* * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例 * */ public class StaticFactory { private static Map<String, Car> cars = new HashMap<>(); static{ cars.put("audi", new Car("audi",300000)); cars.put("ford", new Car("ford",400000)); } //静态工厂方法 public static Car getCar(String name){ return cars.get(name); } }
配置文件:
<!-- 通过静态工厂方法配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 --> <!-- class属性:指向静态工厂的全类名; factory-method:指向静态工厂的静态方法; <constructor-arg>:如果方法需要返回值,则用该节点依次传入 --> <bean id="car" class="com.demo.factory.StaticFactory" factory-method="getCar"> <constructor-arg value="audi"></constructor-arg> </bean>
测试类:
public static void main(String[] args) throws SQLException { ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Car car = (Car)ac.getBean("car"); System.out.println(car); }
输出:
Car [cname=audi, price=300000.0]

浙公网安备 33010602011771号