二、通过工厂方法来配置bean
调用静态工厂方法创建 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相关推荐
- 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★
实验5:配置通过静态工厂方法创建的bean.实例工厂方法创建的bean.(FactoryBean测试)★ bean的创建默认就是框架利用反射new出来的bean实例 工厂模式:工厂帮我们创建对象:有一 ...
- 通往架构师之路系列之Java设计模式(二)工厂方法模式
前言 参考:虫洞栈 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类 决定实例化对象的类型. 这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图 ...
- 《深入设计模式》笔记 -创建型模式二、工厂方法模式
抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 问题 假设你正在开发一款家具商店模拟器. 你的代码中 ...
- 设计模式系列漫谈之二 - 工厂方法模式
故事 10月1日是小雪的生日.许多追求者都想在生日那天给小雪一份意想不到的惊喜,并且表达自己的爱意.这些追求者绞尽脑汁的为小雪发送一个比较有创意的祝福短信.看来,小雪今年的生日过得肯定非常 ...
- 创建型模式二:工厂方法模式
1. 工厂模式介绍 工厂模式(Factory Pattern)的意义就跟它的名字一样,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象.工厂模式根据不同的参数来实现不同的分配方案和创建对象. ...
- JavaScript设计模式(二)-- 工厂方法模式
定义 通过对产品类的抽象使其创建业务主要负责用于多类产品的实例. 这是一个什么样的模式? 创建多个学科类,如果使用简单工厂模式进行: //创建Java part var Java = function ...
- 小话设计模式(二)工厂方法模式
工厂方法(Factory Method)由名虚构造器(Virtual Constructor),是一种创建型的设计模式.使用工厂模式的意图便是定义一个用于创建对象的接口,让子类决定实例化哪一个类.它使 ...
- spring 通过工厂方法配置Bean
概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...
- spring配置bean
第一章 spring框架构成 第二章 spring容器 第三章 spring配置bean 文章目录 spring配置bean 使用xml配置 使用构造器创建 依赖注入方式 setter方法注入 构造方 ...
最新文章
- 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
- 如何来理解Python中的字典数据类型
- hostapd移植与使用
- 高度随宽度适应的响应式方案
- 基于VTK的MFC应用程序开发(3)
- 面试官:你了解JVM的锁优化吗?
- Vue——项目部署到非根目录下的解决方案
- pythonpptx 楷体_python-pptx 实践 4:添加形状、文本
- 模板模式(Template)
- Emacs:报错:File error: Cannot open load file,cl-lib解决
- Python面向对象-0
- oracle使用max提升效率,小小小的问题------关于count(*) 和 max(rownum) 效率问题
- 信息安全 —— 密码学
- Autoware.auto 毫米波雷达目标检测demo展示
- 【机器学习】李宏毅-食物图像分类器
- java mail 回复邮件_JavaMail - 退回邮件( Bounced Messages)
- R语言并行计算spearman相关系数
- 网络扫描技术揭秘读书笔记3--TCP SYN扫描
- 机器人涂装工程师岗位英文缩写_公司里各职位名称的英文缩写
- 怎么开发一款应用程序?
热门文章
- python小程序源代码-整理了适合新手的20个Python练手小程序
- python编程输入标准-《Python编程 第四版》 -第3章 脚本运行上下文
- python序列类型-Python(第八课,序列类型)
- python读取txt文件并写入excel-Python实现读取并写入Excel文件过程解析
- python计算每月工资-Python实现扣除个人税后的工资计算器示例
- 学python用什么书-python有什么好的书籍
- 树莓派python编程自学-一些缩短树莓派学习曲线的书籍、课程和网站
- python课程费用-Python在线培训课程费用是多少?值不值得报名?
- 为什么要叫python-为什么叫Python
- 编程小白的第一本python入门书-《编程小白的第一本Python入门书》读书笔记