Spring基础15——通过工厂方法来配置bean
1、什么是工厂方法
这里的工厂方法指的是创建指定bean的方法。工厂方法又分为静态工厂方法和实例工厂方法。
2、静态工厂方法配置bean
调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,不需要创建工厂实例就可以返回工厂创建的对象,就叫做静态工厂,当客户端需要对象时,只需要简单的调用静态方法,而不需要关心创建对象的细节。要声明通过静态方法创建的Bean,需要在Bean的class属性指定拥有该工厂的方法的类,同时在factory-method属性里指定工厂方法的名称,最后使用<constrctor-arg>元素为该方法传递方法参数。
首先创建一个提供静态工厂方法的类:
public class StaticCarFactory {
private static Map<String, Car> cars = new HashMap<String, Car>();
static {
cars.put("audi", new Car("audi", 300000));
cars.put("ford", new Car("audi", 400000));
}
//静态工厂方法,根据名字获取car对象
public static Car getCar(String name) {
return cars.get(name);
}
}
spring配置文件
<!--通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例-->
<!--
class属性:指向静态工厂的全类名
fatory-method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="car1" class="com.wzy.factory.StaticCarFactory" factory-method="getCar">
<constructor-arg name="name" value="audi"/>
</bean>
编写Main测试类
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car1 = (Car) ctx.getBean("car1");
System.out.println(car1);
}
}
输出结果:我们可以看到通过静态工厂成功创建了一个对象。

3、实例工厂方法配置bean
使用实例工厂方法配置bean首先需要创建一个实例工厂的bean,通过调用实例工厂bean的非静态方法创建目标的bean对象,同时在factory-bean属性里指定工厂bean的id,最后使用<constrctor-arg>元素为该方法传递方法参数。
首先创建一个实例工厂的bean:
public class InstanceCarFactory {
private Map<String, Car> cars = null;
public InstanceCarFactory() {
cars = new HashMap<String, Car>();
cars.put("audi", new Car("audi", 300000));
cars.put("ford", new Car("ford", 400000));
}
public Car getCar(String name){
return cars.get(name);
}
}
配置Spring配置文件
<!--实例工厂的实例-->
<!--
factory-bean:指向实例工厂方法的bean
fatory-method:指向实例工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="instanceCarFactory" class="com.wzy.factory.InstanceCarFactory"/>
<!--通过实例工厂来配置bean-->
<bean id="car2" factory-bean="instanceCarFactory" factory-method="getCar">
<constructor-arg name="name" value="ford"/>
</bean>
修改Main测试类:
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
}
}
输出结果:

Spring基础15——通过工厂方法来配置bean的更多相关文章
- 二、通过工厂方法来配置bean
调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean ...
- Spring工厂方法(factory-bean)配置bean
在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...
- Spring(十三):使用工厂方法来配置Bean的两种方式(静态工厂方法&实例工厂方法)
通过调用静态工厂方法创建Bean 1)调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不需要关心创建对象的具体细节. 2)要声明通过静态 ...
- 静态工厂方法和实例工厂方法及普通的bean
容纳你的bean bean工厂:最简单的容器,提供了基础的依赖注入支持.创建各种类型的Bean. 应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务. ...
- Spring框架入门之基于Java注解配置bean
Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...
- Spring初学之通过工厂方法配置Bean
工厂方法配置bean分为两种,一种是实例工厂方法,另一种是静态工厂方法. 先来看看实体bean: Car.java: package spring.beans.factory; public clas ...
- 学习Spring(二) 调用静态工厂方法创建Bean
1,创建抽象的产品类 package com.robert.spring.shop; public abstract class Product { } 2,创建具体产品类 package com.r ...
- JS基础_使用工厂方法创建对象(了解下就行了,用的不多)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础_使用工厂方法创建对象
创建一个对象 var obj={ name:"hhh", age:28, gender:"男", say:function(){ console.log(&qu ...
随机推荐
- HDU3465--Life is a Line(树状数组求逆序数,离散化)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...
- Linux安装配置redis 、启动redis、redis设置密码
由于间隔时间较长.机器的环境不同等等原因,所以每次安装redis的时候总是不那么顺利,所以这次我要做个笔记 文章大部分内容源于https://blog.csdn.net/gisredevelopmen ...
- Oracle rac11g 安装报INS41112
由于集群服务器上的数据库存储层要上双活,所以需要重置存储 不幸17服务器在重启后突然奔溃了,所以需要重新安装17服务器系统 在把18的软件全都卸载干净后,重新安装集群服务器,但却遇到了如下问题 多次针 ...
- Elasticsear搭建
2.1:创建用户: (elasticsearch不能使用root用户) useradd angelpasswd angel 2.2:解压安装包 tar -zxvf elasticsearch-5.5. ...
- python3.7--pycharm selenium自启360浏览器/360极速浏览器方法
写于:2019.01.02(实测日) 参考文档:https://blog.csdn.net/five3/article/details/50013159 一.下载360浏览器或360极速浏览器的Chr ...
- 【Spark机器学习速成宝典】基础篇03数据读取与保存(Python版)
目录 保存为文本文件:saveAsTextFile 保存为json:saveAsTextFile 保存为SequenceFile:saveAsSequenceFile 读取hive 保存为文本文件:s ...
- webpack安装大于4.x版本(没有配置webpack.config.js)
webpack安装大于4.x版本(没有配置webpack.config.js) webpack 输出参数-o 高版本 如果安装的webpack版本大于4+,还需要安装webpack-cli.在没有配 ...
- 将ubuntu系统录到u盘上
可以使用bootice工具对u盘分区,并隐藏,然后把系统录到隐藏分区,ubuntu只需要1.5G即可.bootice很强大 录制工具可选的有Universal USB Install.UltraISO ...
- PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式
1.单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. 要实现每一个类只有一个实例,就需 ...
- 【MyBatis】-----初识【MyBatis】
一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...