前言

工厂模式是一种在工程中广泛应用的设计模式,对代码的解耦合起到了很大的作用。实际上,我们可以将Spring理解成封装了我们工程中大量重复代码的一种工具,上一节说了,Spring中最为重要的组件就是IOC,而IOC中非常重要的部分就是应用了工厂模式的代码。而工厂模式依赖于Java的反射机制,所以,我们从反射机制讲起,一步步了解Spring的Bean工厂。

Java中的反射机制

我们在此处并不会详细介绍反射机制,只会讲述一些简单的内容,详细的东西我会整合成一篇文章供大家参考。
反射机制是指程序在运行的过程中,对于任意的一个类,我们都能够获取它的所有属性、方法,对于任何一个对象,都能调用它的任意方法和属性。
你还记得我们使用JDBC的流程吗?

//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
……
……

Class.forName()方法就是在程序运行的过程中,动态的将Driver这个类加加载到JVM(Java虚拟机)中并初始化,然后我们就能够直接调用这个类及其方法。实际上最简单的工厂模式就是用的这个方法,在JVM运行期直接通过forName方法创建某个类。了解了这些我们就开始工厂模式的讲解。

工厂模式

工厂模式提供了一种绝佳的创建对象的方法。在工厂模式中,我们并不会直接使用new来创建一个对象,而是使用一个共同的接口类来指定其实现类,这就大大降低了系统的耦合性——我们无需改变每个调用此接口的类,而直接改变实现此接口的类即可完成软件的更新迭代。直接来看一下下面这个工厂模式的代码。

import java.util.ResourceBundle;/*** 使用此工厂类创建bean实例*/
public class BeanFactory {//加载配置文件private static ResourceBundle bundle;static {bundle = ResourceBundle.getBundle("instance");}//根据指定的key,读取配置文件的全路径,创建对象public static <T>T getInstance(String key,Class<T> clazz){String className = bundle.getString(key);try {return (T)Class.forName(className).newInstance();}catch (Exception e){throw new RuntimeException();}}
}

Class.forName(className).newInstance()方法就会返回className对应的类,这样我们就能够使用了。
ResourceBundle这个类是用来读取classpath中文件,这个文件需要放在resources文件夹或java包的根路径下,文件名必须是*.properties这个配置文件类型。这样读取到的文件流就形成了键值对的存储形式。配置文件的示例如下(使用键值对的方式配置):

#service instance
foodTypeService=service.impl.FoodTypeService
dinnerTableService=service.impl.DinnerTableService

注意,配置文件中配置的需是接口的实现类,因为在工厂创建Bean的时候我们是使用接口来接收实现类的,这样才能够实现解耦合。笨着方法想,我们不能够直接new一个接口,对不对。
调用的时候如此调用:

protected IDinnerTableService dinnerTableService = BeanFactory.getInstance("dinnerTableService",IDinnerTableService.class);

我们传入key和DinnerTableService的class,通过这种方法就能够得到一个对象。

Spring中的工厂模式

工厂模式的思想正好契合SpringIOC的设计思想:某一接口的具体实现类的选择控制权从调用类中移除,转而交给第三方决定,即借由Spring的Bean配置来实现控制,这同样也是工厂模式的思想。
在Spring中有两个最基本的工厂,BeanFactory和ApplicationContext。BeanFactory是Spring框架的基础设施,面向的是Spring本身,也就是用于创建Spring扩展的其他内容,如Spring Security、Spring JDBC等,而ApplicationContext这个工厂是面向开发者的,也就是应用上下文——配置文件等,开发者能够使用这个工厂实现自己的功能。
关于Spring中的工厂模式,我们在后续的文章中会继续讲解,欢迎关注。

结语

如果您喜欢我的文章,欢迎关注微信公众号“最高权限比特流”。

Spring中的工厂模式相关推荐

  1. PHP 中使用工厂模式

    >>PHP实现单件模式的几种方式 工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加 灵活,熟练掌握 ...

  2. 第09课:生活中的工厂模式——你要拿铁还是摩卡

    用程序来模拟生活 从剧情中思考工厂模式 工厂模式的模型抽象 类图 模型说明 简单工厂的优点 简单工厂的缺点 模型的拓展应用 应用场景 [拓展]工厂三姐妹 简单工厂模式 工厂方法模式 抽象工厂模式 进一 ...

  3. Spring中的代理模式

    Spring中的代理模式,是Spring中一大核心 AOP(切面编程)的底层实现. 代理模式可分为: 静态代理 动态代理 静态代理 涉及三类角色,简单分析一下: 抽象角色(一般会使用接口或抽象类解决) ...

  4. java中的工厂_java中的工厂模式

    1.工厂模式 java中的工厂模式,个人理解是:要想制作一个汽车,则必须有轮子,发动机,座椅等. 1.创建一个接口,并且使得轮子,发动机,座椅三个实现类实现这个接口. 2.创建一个工厂,生成基于给定信 ...

  5. 解析Spring IOC原理——工厂模式与反射机制的综合应用

    (一)工厂模式 从一个例子开始讲起: 首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下: [java ...

  6. java中的工厂模式_深入理解Java的三种工厂模式

    一.简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口.抽象类,也可以是具体的类 实现汽车接口 奔驰类 宝马类 简单工厂,既能生产宝马又能生产奔 ...

  7. (六)Spring之回顾工厂模式

    文章目录 工厂模式的三种形态 简单工厂模式 工厂方法模式 抽象工厂模式 Spring学习目录 上一篇:(五)Spring之Bean的作用域 下一篇:(七)Bean的实例化方式 工厂模式的三种形态 第一 ...

  8. Spring框架之工厂模式

    简单的工厂模式 工厂模式:把原来分布在各个地方的对象的创建过程单独抽离出来,统一交给工厂类来创建所需的对象. (需要使用对象的时候,不要自己去new,通过工厂(方法)来创建对应的对象) 1.常规模式创 ...

  9. java中的工厂模式

    一.工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式的几种形态: (1)简单工厂(Simple Factor ...

  10. java中的工厂模式_java中工厂模式详解和使用方法

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

最新文章

  1. linux c下输入密码不回显
  2. Angular7教程-06-页面与数据交互
  3. 重构之SqlHelper
  4. EVC实现拷贝文件夹下所有文件
  5. Django Cookie于Session
  6. 发布一个mmap的trie_midrmm02_新浪博客
  7. mysql开机自启动设置
  8. js判断浏览器类型、是否为移动客户端访问
  9. 【java学习之路】(数据结构篇)001.数组
  10. php 返回的缓存数据,php 部分缓存数据库返回数据的例子
  11. [数据结构]二叉搜索树概念及基本操作
  12. Atitit 移动互联网 技术维度 1. 1.3 移动互联网网络技术13 1 2. 第2章 移动终端53 手机 平板 2 3. 移动操作系统67 2 4. 移动互联网应用技术99 2 5. 3 6.
  13. mtk最新刷机平台SP_Flash_Tool_v6.2208_Win
  14. MAC安装Charles破解版简易教程
  15. excel打不开html格式的文件,电脑excel无法打开提示“因为文件格式或文件扩展名无效”如何解决...
  16. 安卓手机连接Mac电脑可用的管理工具:Android File Transfer
  17. 中风后下肢麻木瘀阻案
  18. 2022 知来者之可追
  19. paypal创始人_艾问PayPal创始人彼得·蒂尔(无删减)
  20. 调整照片色彩改变照片风格Lightroom Classic2022中文

热门文章

  1. 江苏省公安厅交管高速公路硬件扩容备份一体机项目
  2. 新益华基层医疗系统使用方法_家中更换新路由器了,但不知道如何替换?可以尝试使用这种方法...
  3. 为方便储户,某银行拟开发计算机储蓄系统。
  4. MyBatis拦截器执行顺序
  5. BT.709 vs BT.2020
  6. matlab 正负数,matlab 开根号如何同时取到正负值
  7. linux下怎么解压tar.gz,linux下怎么解压.tar.gz .tar.bz2命令
  8. Android 显示原生Emoji
  9. 酒店管理系统web版/Java酒店管理系统
  10. 华为网络技术比赛-note(2018)