目录

1、概述

2、示例

创建User类

创建 factory-method 类

spring配置

spring引导类

运行结果


1、概述

factory-method:通过工厂类创建Spring bean。两种方式:一种静态方法,一种动态方法。

2、示例

创建User类

package thinking.in.spring.boot.samples.spring5.bean;public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +'}';}
}

创建 factory-method 类

package thinking.in.spring.boot.samples.spring5.factorybean;import thinking.in.spring.boot.samples.spring5.bean.User;/*** 演示 factory-method*/
public class UserFactory {public static User getStaticUser() throws Exception {User user = new User();user.setId(100);user.setName("静态工厂方法创建User");return user;}public User getDynamicUser() throws Exception {User user = new User();user.setId(200);user.setName("动态工厂方法创建User");return user;}}

spring配置

<!-- 静态 factory-method 示例 --><bean id="staticFactoryMethod" class="thinking.in.spring.boot.samples.spring5.factorybean.UserFactory"factory-method="getStaticUser" /><!-- 动态 factory-method 示例 --><bean id="userFactory" class="thinking.in.spring.boot.samples.spring5.factorybean.UserFactory" /><bean id="dynamicFactoryMethod" factory-bean="userFactory"factory-method="getDynamicUser" />

spring引导类

package thinking.in.spring.boot.samples.spring5.bootstrap;import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import thinking.in.spring.boot.samples.spring5.customlabel.CustomLabel;
import thinking.in.spring.boot.samples.spring5.bean.User;
import thinking.in.spring.boot.samples.spring5.factorybean.UserFactoryBean;public class XmlBeanFactoryBootstrap {public static void main(String[] args) {DefaultListableBeanFactory defaultListableBeanFactory = new XmlBeanFactory(new ClassPathResource("application-context.xml"));/*** factory-method*/User staticUser = (User) defaultListableBeanFactory.getBean("staticFactoryMethod");System.out.println("factory-method 实例化的User对象:" + staticUser);User dynamicUser = (User) defaultListableBeanFactory.getBean("dynamicFactoryMethod");System.out.println("factory-method 实例化的User对象:" + dynamicUser);}
}

运行结果

factory-method 实例化的User对象:User{id=100, name='静态工厂方法创建User'}
factory-method 实例化的User对象:User{id=200, name='动态工厂方法创建User'}

factory-method相关推荐

  1. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  2. 《转》java设计模式--工厂方法模式(Factory Method)

    本文转自:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象 ...

  3. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

    工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...

  4. 工厂方法(Factory Method)模式

    一.工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟的子类中. 工厂方法模式是简单工厂 ...

  5. Spring 通过工厂方法(Factory Method)来配置bean

    在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...

  6. Design Pattern - Factory Method(C#)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Defi ...

  7. 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)

    五个角色:产品角色(Product).真实产品角色(ConcreteProduct).工厂角色(Creator).真实工厂角色(ConcreteCreator).客户端(Client) 产品角色(Pr ...

  8. 在 Java 中应用设计模式 - Factory Method

    基本概念 FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需 ...

  9. java设计模式1--工厂方法模式(Factory Method)

    本文地址:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html,转载请注明源地址. 工厂方法模式(别名:虚拟构造) ...

  10. Item 29. Virtual Constructors and PrototypeItem 30. Factory Method

    Item 29. Virtual Constructors and Prototype Virtual Constructors? C++没有Virtual Constructors这个概念.但有的情 ...

最新文章

  1. c#sort升序还是降序_Linux排序命令sort笔记
  2. 爬虫好学吗python-爬虫Python入门好学吗?学什么?
  3. 删除所有的.svn文件夹
  4. Web Hacking 101 中文版 十七、服务端请求伪造
  5. 绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享
  6. python增量更新数据_Python标准库——加密
  7. 贪心 Codeforces Round #273 (Div. 2) C. Table Decorations
  8. r7 2700X装Linux,R7 2700X大战i7 8700K:谁才是游戏玩家的菜?
  9. 故障树手册(Fault Tree handbook)(5)
  10. larval 捕获mysql错误_larval中怎样捕获mysql错误
  11. 网络空间安全论文笔记2——漏洞
  12. 安装mysql出现问题:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题
  13. 在线html编辑器 富文本转为html代码
  14. 用计算机对视频进行剪裁和编辑,Win10系统剪裁视频功能怎么用?windows10剪裁视频功能使用方法介绍...
  15. 1047: 阿姆斯特朗数
  16. pnpm(Run “pnpm setup“ to create it automatically, or set the global-bin-dir setting, or the PNPM_HO)
  17. 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区
  18. C练题笔记之:Leetcode-137. 只出现一次的数字 II
  19. Esp8266进阶之路16 esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。(附带固件)
  20. 通过JS方式实现隐藏手机号码中间4位数

热门文章

  1. 九龙证券|港股盘中暴涨110%!多股涨停,有色、汽车板块爆发!
  2. google map v3离线版地图
  3. 摩托罗拉手机连接Wifi后提示“网络受限”问题的解决!
  4. 【金猿投融展】齐治科技——数据中心安全管理领军者
  5. 50Projects50Days--RotatingNavgation
  6. win10休眠_Win10系统C盘飘红,6招瞬间腾出十几GB空间
  7. Windows 10 下安装gcc
  8. 这才叫爷们! --转载
  9. 中国到底有多少个程序员?都在哪个城市写代码?
  10. 生物信息中的Markov链