Spring学习记录 -- Spring 框架中的工厂模式(一)

Spring 框架中的工厂模式(一)

1. Spring 简单概述

Spring框架本质上是一个针对Bean的生命周期进行管理的轻量级容器,其核心为Inversion of Control (IOC) 与 Aspect Orirented Programming (AOP)。其中IOC也被称 Dependency Injection (DI)。所谓依赖注入,就是由IOC容器再运行期间,动态地将某依赖关系注入到对象之中, 目的是实现对象之间的解耦。而在Spring框架中,BeanFactory作为IOC容器的顶层接口,将Bean的生命周期各个阶段通过不同的接口暴露给我们,可以让我们对其进行操作。本文着重分析Spring框架中BeanFactory的实现与传统工厂模式实现的不同点。

2. BeanFactory

BeanFactory创建Bean实例之前,需要首先需要明白Spring是如何生成Bean的

简单来说,通过BeanDenfinitionReader从不同的方式获得BeanDefinitions,即Bean的元数据,再通过BeanDefinitionRegistry将beanDefinition注册到BeanFactory中并存储至BeanFactory的一个ConcurrentHashMap中,key为beanName, value为BeanDinfition中的元数据。此过程可由下图解释:

在这里插入图片描述
(图片来自Spring之BeanFactory详解_遇见更好的自己、的博客-CSDN博客_beanfactory)

除了BeanDinitionRegistry 提供对BeanDefinition的注册等操作之外,还有SingletonBeanRegistry负责对单例Bean进行注册等操作。

从BeanFactory的具体实现类来看beanDefinition被存储到DefaultListableBeanFactory中的beanDefinitionMap中,如下图所示:
在这里插入图片描述

区别1:与传统工厂模式不同的是,Spring框架中生成新的Bean类是通过配置文件,或者注解将Bean的属性信息等读取出来然后注册到BeanFactory中的。传统工厂模式中,比如抽象工厂模式想要生成一个JavaBean对象,需要在最顶层的AbstractFactory中加入生成该对象的方法,并在各个ConcretFactory中实现该方法,比较繁琐。

再来看BeanFactory的整体结构:
在这里插入图片描述
在这里插入图片描述

(图片来自Spring精讲:什么是BeanFactory?(附源码)_头顶假发的博客-CSDN博客_什么是beanfactory
可以看到DefaultListableBeanFactory实现了诸多接口

  1. SingletonBeanFactory:定义对单例缓冲池的操作

  2. ConfiguableBeanFactory:定义可配置的BeanFactory, 如bean的classLoader等

  3. AutowireCapableBeanFactory(继承关系):定义能进行自动装配的BeanFactory, 如装配类型(byName/byType), createBean, autowireBean等,与bean的生命周期相关的方法都在这里体现

区别2:Spring框架中 BeanFactory有很多针对不同功能接口,并且接口之间呈逐级继承关系,丰富了工厂的类型。在实现类当中也呈现逐级继承关系,高层类承担一部分接口实现的功能,如AbstractAutowireCapableBeanFactory实现了创建bean的功能。在传统工厂模式中,如抽象工厂模式 AbstractFasctory直接由一系列ConcreteFactory实现,功能比较单一,无法对功能进行拓展,且各个实现类之间没有继承关系,创建功能之间有重合的工厂时效率较低。

3. 相同点

最后,对于Java反射机制,Spring框架中的Bean动态装载过程便是通过解析xml或者properties文件中的内容获得某个class实例这一反射机制来实现的。这点与工厂模式中使用的反射机制相同,为二者的共同点。

Java程序首先经编译器 (如javac.exe) 编译成Class文件 (字节码文件),然后字节码会经JVM解释转译成机器可直接执行的机器码。

参考文章

Spring之BeanFactory详解_遇见更好的自己、的博客-CSDN博客_beanfactory

Spring精讲:什么是BeanFactory?(附源码)_头顶假发的博客-CSDN博客_什么是beanfactory

Spring框架概述_IT圈最后的深情的博客-CSDN博客_spring框架概述

浅谈Spring框架应用的设计模式(一)——工厂模式_猿梦学码的博客-CSDN博客_spring工厂模式怎么实现的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值