Spring的实例工厂方法和静态工厂方法
静态工厂方法:直接调用静态方法可以返回Bean的实例
[java] view plain copy
- package com.zhu.string.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(3000, "aodi"));
- cars.put("fodo", new Car(3000, "aodi"));
- }
- //静态工厂方法
- public static Car getCar(String name){
- return cars.get(name);
- }
- }
实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例
[java] view plain copy
- package com.zhu.string.factory;
- import java.util.HashMap;
- import java.util.Map;
- public class InstanceCarFactory {
- /**
- * 实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例
- */
- private Map<String ,Car> cars=null;
- public InstanceCarFactory() {
- // TODO Auto-generated constructor stub
- cars=new HashMap<String, Car>();
- cars.put("audi", new Car(1000,"audi"));
- cars.put("dffdas", new Car(2000,"audi"));
- }
- public Car getCar(String brand){
- return cars.get(brand);
- }
- }
beans-factory.xml
[html] view plain copy
- <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- 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" factory-method="getCar"
- class="com.zhu.string.factory.StaticCarFactory">
- <constructor-arg value="audi"></constructor-arg>
- </bean>
- <!-- 配置工厂的实例 -->
- <bean id="carFactory" class="com.zhu.string.factory.InstanceCarFactory">
- </bean>
- <bean id="car2" factory-bean="carFactory" factory-method="getCar">
- <constructor-arg value="audi"></constructor-arg>
- </bean>
- </beans></span>
Car.java实体类
[java] view plain copy
- package com.zhu.string.factory;
- public class Car {
- private double price;
- private String brand;
- public double getPrice() {
- return price;
- }
- public void setPrice(double price) {
- this.price = price;
- }
- public String getBrand() {
- return brand;
- }
- public void setBrand(String brand) {
- this.brand = brand;
- }
- @Override
- public String toString() {
- return "Car [brand=" + brand + ", price=" + price + "]";
- }
- public Car(){
- System.out.println("cars....constructor");
- }
- public Car(double price, String brand) {
- super();
- this.price = price;
- this.brand = brand;
- }
- }
Main.java[java] view plain copy
- package com.zhu.string.factory;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class Main {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ApplicationContext cx=new ClassPathXmlApplicationContext("beans-
- factory.xml");
- Car car1=(Car) cx.getBean("car1");
- System.out.println(car1);
- Car car2=(Car) cx.getBean("car2");
- System.out.println(car2);
- }
- }
运行结果:
Car [brand=aodi, price=3000.0]
Car [brand=audi, price=1000.0]