调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节.
要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数.

实例工厂方法: 将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节.
要声明通过实例工厂方法创建的 Bean
在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean
在 factory-method 属性里指定该工厂方法的名称
使用 construtor-arg 元素为工厂方法传递方法参数

<?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="com.xiya.spring.beans.factory.StaticCarFactory" factory-method="getCar">
        <constructor-arg value="Ford"/>
    </bean>

    <!--配置工厂的实例-->
    <bean id="instanceCarFactory" class="com.xiya.spring.beans.factory.InstanceCarFactory"/>
    <!--
        通过实例工厂方法来配置bean
        factory-bean:指向实例工厂的bean
    -->
    <bean id="car2" factory-bean="instanceCarFactory" factory-method="getCar">
        <constructor-arg value="BMW"/>
    </bean>
</beans>
package com.xiya.spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 实例工厂方法:实例工厂的方法,即需要先创建工厂本身,再调用工厂的实例方法来返回bean实例
 * Created by N3verL4nd on 2017/3/20.
 */
public class InstanceCarFactory {private Map<String, Car> cars;

    public InstanceCarFactory() {cars = new HashMap<>();
        cars.put("audi", new Car("audi", 300000));
        cars.put("BMW", new Car("BMW", 500000));
        cars.put("Ford", new Car("Ford", 200000));
    }public Car getCar(String brand) {return cars.get(brand);
    }
}
package com.xiya.spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 静态工厂方法:直接调用一个类的静态方法就可以返回 bean 的实例
 * Created by N3verL4nd on 2017/3/20.
 */
public class StaticCarFactory {private static Map<String, Car> cars = new HashMap<>();

    static {cars.put("audi", new Car("audi", 300000));
        cars.put("BMW", new Car("BMW", 500000));
        cars.put("Ford", new Car("Ford", 200000));
    }//静态工厂方法
    public static Car getCar(String brand) {return cars.get(brand);
    }public static void main(String[] args) {}
}
package com.xiya.spring.beans.factory;

/**
 * Created by N3verL4nd on 2017/3/20.
 */
public class Car {private String brand;
    private int price;

    public Car() {}public Car(String brand, int price) {this.brand = brand;
        this.price = price;
    }public String getBrand() {return brand;
    }public void setBrand(String brand) {this.brand = brand;
    }public int getPrice() {return price;
    }public void setPrice(int price) {this.price = price;
    }@Override
    public String toString() {return "Car{" +"brand='" + brand + '\'' +", price=" + price +'}';
    }
}
package com.xiya.spring.beans.factory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by N3verL4nd on 2017/3/20.
 */
public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans-factory.xml");
        Car car1 = (Car) context.getBean("car1");
        System.out.println(car1);

        Car car2 = (Car) context.getBean("car2");
        System.out.println(car2);
    }
}

输出:

Car{brand='Ford', price=200000}
Car{brand='BMW', price=500000}

转载于:https://www.cnblogs.com/lgh1992314/p/6616213.html

二、通过工厂方法来配置bean相关推荐

  1. 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★

    实验5:配置通过静态工厂方法创建的bean.实例工厂方法创建的bean.(FactoryBean测试)★ bean的创建默认就是框架利用反射new出来的bean实例 工厂模式:工厂帮我们创建对象:有一 ...

  2. 通往架构师之路系列之Java设计模式(二)工厂方法模式

    前言 参考:虫洞栈 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类 决定实例化对象的类型. 这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图 ...

  3. 《深入设计模式》笔记 -创建型模式二、工厂方法模式

    抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 问题 假设你正在开发一款家具商店模拟器. 你的代码中 ...

  4. 设计模式系列漫谈之二 - 工厂方法模式

    故事       10月1日是小雪的生日.许多追求者都想在生日那天给小雪一份意想不到的惊喜,并且表达自己的爱意.这些追求者绞尽脑汁的为小雪发送一个比较有创意的祝福短信.看来,小雪今年的生日过得肯定非常 ...

  5. 创建型模式二:工厂方法模式

    1. 工厂模式介绍 工厂模式(Factory Pattern)的意义就跟它的名字一样,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象.工厂模式根据不同的参数来实现不同的分配方案和创建对象. ...

  6. JavaScript设计模式(二)-- 工厂方法模式

    定义 通过对产品类的抽象使其创建业务主要负责用于多类产品的实例. 这是一个什么样的模式? 创建多个学科类,如果使用简单工厂模式进行: //创建Java part var Java = function ...

  7. 小话设计模式(二)工厂方法模式

    工厂方法(Factory Method)由名虚构造器(Virtual Constructor),是一种创建型的设计模式.使用工厂模式的意图便是定义一个用于创建对象的接口,让子类决定实例化哪一个类.它使 ...

  8. spring 通过工厂方法配置Bean

    概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...

  9. spring配置bean

    第一章 spring框架构成 第二章 spring容器 第三章 spring配置bean 文章目录 spring配置bean 使用xml配置 使用构造器创建 依赖注入方式 setter方法注入 构造方 ...

最新文章

  1. 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
  2. 如何来理解Python中的字典数据类型
  3. hostapd移植与使用
  4. 高度随宽度适应的响应式方案
  5. 基于VTK的MFC应用程序开发(3)
  6. 面试官:你了解JVM的锁优化吗?
  7. Vue——项目部署到非根目录下的解决方案
  8. pythonpptx 楷体_python-pptx 实践 4:添加形状、文本
  9. 模板模式(Template)
  10. Emacs:报错:File error: Cannot open load file,cl-lib解决
  11. Python面向对象-0
  12. oracle使用max提升效率,小小小的问题------关于count(*) 和 max(rownum) 效率问题
  13. 信息安全 —— 密码学
  14. Autoware.auto 毫米波雷达目标检测demo展示
  15. 【机器学习】李宏毅-食物图像分类器
  16. java mail 回复邮件_JavaMail - 退回邮件( Bounced Messages)
  17. R语言并行计算spearman相关系数
  18. 网络扫描技术揭秘读书笔记3--TCP SYN扫描
  19. 机器人涂装工程师岗位英文缩写_公司里各职位名称的英文缩写
  20. 怎么开发一款应用程序?

热门文章

  1. python小程序源代码-整理了适合新手的20个Python练手小程序
  2. python编程输入标准-《Python编程 第四版》 -第3章 脚本运行上下文
  3. python序列类型-Python(第八课,序列类型)
  4. python读取txt文件并写入excel-Python实现读取并写入Excel文件过程解析
  5. python计算每月工资-Python实现扣除个人税后的工资计算器示例
  6. 学python用什么书-python有什么好的书籍
  7. 树莓派python编程自学-一些缩短树莓派学习曲线的书籍、课程和网站
  8. python课程费用-Python在线培训课程费用是多少?值不值得报名?
  9. 为什么要叫python-为什么叫Python
  10. 编程小白的第一本python入门书-《编程小白的第一本Python入门书》读书笔记