广告
返回顶部
首页 > 资讯 > 后端开发 > Python >工厂方法在Spring框架中的运用
  • 258
分享到

工厂方法在Spring框架中的运用

Java工厂方法Spring框架 2022-11-13 18:11:57 258人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

我们都知道spring中ioc是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的。 在上篇文章中我们懂了什么是工厂模式,这篇文

我们都知道springioc是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的。

在上篇文章中我们懂了什么是工厂模式,这篇文章就带着学过的概念深入到Spring的内部看看究竟是怎么使用该模式的。

在Spring中使用工厂方法的是BeanFactory和FactoryBean<>接口。

一、BeanFactory使用工厂方法

使用了Spring框架,我们就很少自己进行对象的创建了,而我们使用到的对象当然就是交给Spring的工厂模式来创建的了。

其中BeanFactory是Spring容器的顶层接口,也是Bean工厂最上层的接口,其会有很多工厂实现例如ClassPathXmlApplicationContext、XmlWEBApplicationContext其中最常见的就是DefaultListableBeanFactory,我们可以把BeanFactory看成是一种工厂方法模式。

在工厂方法模式中有四个角色:

1、抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 createProduct() 来创建产品。

2、具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。

3、抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。

4、具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

BeanFactory是角色中的抽象工厂,而getBean就相当于我们实例中的createProduct()方法,用于创建对象。

DefaultListableBeanFactory等实现的工厂类就是角色中的具体工厂。

产品就是在我们开发中加上注解的@Controller@Service@compent@Configuration的类,Spring会将他们当成产品使用工厂模式生成对象。

在我们createProduct方法中是直接创建的对象,Spring肯定不会这么的笨,我们接着看getBean方法的实现方法。

getBean方法中一系列链路最终调用到doGetBean方法用于创建对象,在doGetBean中创建对象使用的是设计模式中的代理模式。

二、FactoryBean<>使用工厂方法

讲完BeanFactory,再介绍另外一个工厂模式的应用FactoryBean<>,想必大家也经常会比较这俩。

实际上,这两个接口都是用于创建对象,都可以看做是工厂方法模式的实现。

FactoryBean<>工厂通过getObject()方法来创建并返回对象,我们可以通过实现FactoryBean<>来定制化自己需要的Bean对象。

既然FactoryBean<>是留个开发者实现的,我们就手动实现一个FactoryBean<>。

@Component
public class MyFactoryBean<> implements FactoryBean<><Product>, BeanNameAware {
    private String name;
    @Override
    public Product getObject() throws Exception {
        return new Product();
    }

    @Override
    public Class<?> getObjectType() {
        return Product.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }

    @Override
    public void setBeanName(String s) {
        this.name = name;
    }
}

接着我们分别使用两种方式getBean。

public static void main(String[] args) {

    //测试FactoryBean<>
    ApplicationContext ac =new AnnotationConfigApplicationContext(MyFactoryBean<>.class);

    System.out.println(ac.getBean("myFactoryBean<>"));

    System.out.println(ac.getBean("&myFactoryBean<>"));

}

只是在获取Bean时加了一个&会出现两种情况。

cn.sky1998.create.methodFactory.Product@52a86356
cn.sky1998.create.methodFactory.MyFactoryBean<>@5ce81285

doGetBean里面进行了判断是否是FactoryBean<>的实现类。

Spring对FactoryBean<>的实现机制是当你获取一个Bean时,如果获取的Bean的类型是FactoryBean<>,并且其name中并没有&则调用bean的getObject方法获取FactoryBean<>实现类中提供bean,否则就是直接返回普通的bean类型。

当我们在引入其他框架整合Spring时,便会有很多桥接整合包,例如mybatis-spring等,其中就会有FactoryBean<>的实现,例如sqlSessionFactoryBean<>、MapperFactoryBean<>等,将需要整合的定制化Bean通过工厂方法的模式,加入进Spring容器中。

当我们整合Mybatis时无论是多么的Bean都能很好的处理,mybatis-spring中的FactoryBean<>正是将Mybatis的核心启动类给调用出来。

三、BeanFactory和FactoryBean<>的异同

BeanFactory是Spring的一个大工厂,创建着Spring框架运行过程中所需要的Bean;

而FactoryBean<>是一个定制化工厂,其会存在于BeanFactory创建对象的过程中,当有需要时,会通过FactoryBean<>去自定制个性化的Bean,从而Spring框架提高扩展能力。

这篇文章加深工厂方法的理解的同时,又进一步的深入了BeanFactory和FactoryBean<>的实现细节。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: 工厂方法在Spring框架中的运用

本文链接: https://www.lsjlt.com/news/169950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 工厂方法在Spring框架中的运用
    我们都知道Spring中IOC是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的。 在上篇文章中我们懂了什么是工厂模式,这篇文...
    99+
    2022-11-13
    Java 工厂方法 Spring框架
  • 工厂方法在Spring框架中怎么运用
    今天小编给大家分享一下工厂方法在Spring框架中怎么运用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、BeanFact...
    99+
    2023-07-04
  • (PHP学习笔记)工厂类在MVC框架中的运用
        在基本的MVC框架模型中,会引用到数据库和模板文件。但是不同的开发者会选择不同的数据库以及模板引擎。因为在实际开发的过程中,有可能会更换数据库或者是模板引擎,...
    99+
    2022-10-18
  • Spring框架开发IOC两种创建工厂方法详解
    1.IOC有两种创建工厂的方法 IoC 通过工厂模式创建 bean 的方式有两种: 静态工厂方法 实例工厂方法 2.两种方法的不同 2.1静态方法创建 就是直接可以通过静态方法来实例...
    99+
    2022-11-12
  • 详解设计模式中的工厂方法模式在Python程序中的运用
    工厂方法(Factory Method)模式又称为虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,属于类的创建型模式。在工厂方法模式中,父...
    99+
    2022-06-04
    模式 详解 工厂
  • 接口和数组在Java中如何运用Spring框架?
    Java作为一门广泛应用的编程语言,其流行的Spring框架也让人越来越感兴趣。其中,接口和数组在Spring框架中的运用也是一个重要的主题。在本文中,我们将探讨如何在Spring框架中使用接口和数组,以及如何通过演示代码来帮助读者更好地理...
    99+
    2023-08-09
    接口 spring 数组
  • Spring Boot中使用Spring Retry重试框架的操作方法
    目录Spring Retry 在SpringBoot 中的应用Maven依赖注解使用开启Retry功能注解@Retryable注解@Recover注解@CircuitBreakerR...
    99+
    2022-11-13
  • 在java项目中实现工厂模式的方法
    在java项目中实现工厂模式的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java 工厂模式的实例详解工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。而客户是要和...
    99+
    2023-05-31
    java 工厂模式 ava
  • 如何在Spring框架中配置 jndi数据源方法详解
    本篇文章为大家展示了如何在Spring框架中配置 jndi数据源方法详解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。xml配置:<bean id="dataSource&...
    99+
    2023-05-31
    spring jndi 数据源
  • Spring框架在PHP和Unix的框架中的应用场景是什么?
    Spring框架在Java开发中的应用非常广泛,但是在PHP和Unix的开发中,Spring框架也有着重要的应用场景。本文将详细介绍Spring框架在PHP和Unix的框架中的应用场景,并且会穿插一些演示代码。 Spring框架在PHP的...
    99+
    2023-09-04
    unix 框架 spring
  • 【Spring框架全系列】方法注解@Bean的使用
    📬📬哈喽,大家好,我是小浪。上篇博客我们介绍了五大类注解的使用方法,以及如何解决Spring使用五大类注解生成bean-Name的问题;那么,谈到如何更简单的读取和存储对象,这里我们还需要介绍另外一个"方...
    99+
    2023-09-27
    java spring boot spring
  • Java中接口和数组的运用:Spring框架的实现方式是什么?
    在Java编程中,接口和数组是两种非常重要的概念。其中,接口是一种定义了方法和常量的抽象类型,而数组则是一种可以存储多个相同数据类型的容器。在实际的编程中,这两个概念经常被用来设计和实现各种复杂的程序。在本文中,我们将重点讨论Spring...
    99+
    2023-08-09
    接口 spring 数组
  • 在Java中使用日志框架log4j的方法
    日志就是记录程序的运行轨迹,方便快速定位问题 如果用System.out.println(),信息是打印在控制台。等到产品上线后没有控制台,如果有报错信息,根本不知道去哪里看,就不知...
    99+
    2022-11-12
  • 如何在Spring框架中使用Python的NumPy API?
    Spring框架是一款非常流行的Java开发框架,它提供了丰富的功能和组件,可以帮助开发者快速构建高质量的Java应用程序。而Python的NumPy API是一款非常强大的科学计算库,它提供了丰富的数学函数和数据结构,可以帮助开发者更加高...
    99+
    2023-09-26
    api numpy spring
  • HTTP协议在Java和Git中的应用——Spring框架的实现方式。
    HTTP协议是应用层协议中最为重要的一种。它是Web应用程序的基础,也是现代互联网应用架构中的核心组成部分。在Java和Git中,HTTP协议的应用非常广泛,而Spring框架的实现方式则是其中一种。 一、Java中的HTTP应用 Jav...
    99+
    2023-07-24
    http git spring
  • Python 在 Spring 框架中的应用场景有哪些?
    Python 和 Spring 框架都是在软件开发领域非常流行的工具,它们分别在不同的领域发挥着重要的作用。但是,Python 在 Spring 框架中的应用场景又有哪些呢?本文将为您详细介绍。 Spring Boot 中使用 Pytho...
    99+
    2023-09-04
    文件 关键字 spring
  • php中Libevent框架的使用方法
    这篇文章主要介绍php中Libevent框架的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自...
    99+
    2023-06-14
  • NumPy 框架的高效存储方式在 Go 中的应用方法?
    NumPy 框架是 Python 中最常用的科学计算库之一。它提供了高效的多维数组操作和广播功能,以及许多数学函数和统计方法。在大规模数据处理和机器学习领域,NumPy 框架被广泛应用。但是,当我们需要在其他语言中使用 NumPy 框架时,...
    99+
    2023-10-18
    存储 numy 框架
  • 怎么在不使用spring框架中使用aop的功能
    本篇文章为大家展示了怎么在不使用spring框架中使用aop的功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring框架的AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代...
    99+
    2023-06-22
  • 如何在不使用spring框架中使用aop的功能
    目录spring提供了两种方式的AOP使用使用xml配置方式使用注解方式AspectJ简介AspectJ的使用实例不使用spring的aop功能实现日志输出第一种第二种:通过面向接口...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作