spring学习笔记九 通过工厂方法配置bean

来源:互联网 发布:ceb文件阅读器mac版 编辑:程序博客网 时间:2024/04/28 01:12

一、静态工厂方法

在factory包下,建立四个类,目录结构如下:


      

car.java

package factory;public class car {     private String brand;     private double price;public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public car(String brand, double price) {super();this.brand = brand;this.price = price;}@Overridepublic String toString() {return "car [brand=" + brand + ", price=" + price + "]";}     }
staticcarfactory.java

package factory;import java.util.HashMap;import java.util.Map;public class staticcarfactory {      /*静态工厂方法:直接调用一个类的静态方法,返回一个bean的实例*/private static Map<String, car> cars=new HashMap<String, car>();static{cars.put("Audi", new car("Audi", 30000));cars.put("DaZhong", new car("DaZhong", 50000));}public static car getcar(String name){return cars.get(name);}}
Main.java

package factory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("factory.xml");car car1=(car) ctx.getBean("car1");System.out.println(car1);}}
factory.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--     通过静态工厂方法配置bean,注意不是配置惊天工厂方法实例,而是配置bean实例      class 属性:指向静态工厂方法的全类名  factory-method:指向静态工厂方法的名字    constructor-arg:如果工厂方法需要传参数,则使用constructor-arg来配置参数 --><bean id="car1" class="factory.staticcarfactory"    factory-method="getcar">    <constructor-arg value="Audi"></constructor-arg></bean></beans>

运行结果:

car [brand=Audi, price=30000.0]



二、实例工厂方法

IntanceCarFactory.java

package factory;import java.util.HashMap;import java.util.Map;/* * 实例工厂方法:实例工厂的方法,即需要创建工厂本身,再调用工厂的实例方法来返回bean的实例 * */public class IntanceCarFactory {      private Map<String, car> cars=new HashMap<String,car>();      public IntanceCarFactory(){      cars.put("audi", new car("audi", 300000));      cars.put("DaZhong",  new car("DaZhong", 400000));      }      public car getcar(String brand){      return cars.get(brand);      }}
factory.java

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--     通过静态工厂方法配置bean,注意不是配置惊天工厂方法实例,而是配置bean实例      class 属性:指向静态工厂方法的全类名  factory-method:指向静态工厂方法的名字    constructor-arg:如果工厂方法需要传参数,则使用constructor-arg来配置参数 --><bean id="car1" class="factory.staticcarfactory"    factory-method="getcar">    <constructor-arg value="Audi"></constructor-arg></bean><!-- 配置工厂实例 --><bean id="car" class="factory.IntanceCarFactory"></bean><!-- 通过实例工厂方法来配置bean --><bean id="car2" factory-bean="car" factory-method="getcar">    <constructor-arg value="DaZhong"></constructor-arg>    </bean></beans>
Main.java

package factory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("factory.xml");car car1=(car) ctx.getBean("car1");System.out.println(car1);//car car2=(car) ctx.getBean("car2");//System.out.println(car2);}}


运行结果:

car [brand=Audi, price=30000.0]
car [brand=DaZhong, price=400000.0]





原创粉丝点击