前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring中的工厂模式

Spring中的工厂模式

作者头像
roobtyan
发布2019-02-21 15:40:43
2.8K0
发布2019-02-21 15:40:43
举报
文章被收录于专栏:最高权限比特流

前言

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

Java中的反射机制

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

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

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

工厂模式

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

代码语言:javascript
复制
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这个配置文件类型。这样读取到的文件流就形成了键值对的存储形式。配置文件的示例如下(使用键值对的方式配置):

代码语言:javascript
复制
#service instance
foodTypeService=service.impl.FoodTypeService
dinnerTableService=service.impl.DinnerTableService

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

代码语言:javascript
复制
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中的工厂模式,我们在后续的文章中会继续讲解,欢迎关注。

结语

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Java中的反射机制
  • 工厂模式
  • Spring中的工厂模式
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档