区别:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
BeanFactory和FactoryBean都可以用来创建对象,只不过创建的流程和方式不同
当使用BeanFactory的时候,必须要严格的遵守bean的生命周期,经过一系列繁杂的步骤之后可以创建出单例对象,是流水线式的创建过程,
而FactoryBean是用户可以自定义bean对象的创建流程,不需要按照bean的生命周期来创建,在此接口中包含了三个方法,
isSingleton:判断是否是单例对象

getObjectType:获取对象的类型
getObject:在此方法中可以自己创建对象,使用new的方式或者使用代理的方式都可以,用户可以按照自己的需要随意去创建对象,在很多框架继承的时候都会实现FactoryBean接口,比如Feign

1、 BeanFactory

BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接口,也就是Spring IOC所遵守的最底层和最基本的编程规范。在Spring代码中,BeanFactory只是个接口,并不是IOC容器的具体实现,但是Spring容器给出了很多种实现,如 DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,都是附加了某种功能的实现。

使用场景

  • 从Ioc容器中获取Bean(byName or byType)
  • 检索Ioc容器中是否包含指定的Bean
  • 判断Bean是否为单例

2、FactoryBean

一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个org.springframework.bean.factory.FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑。

使用场景

FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象。

我们知道AOP实际上是Spring在运行时创建了一个代理对象,也就是说这个对象,是我们在运行时创建的,而不是一开始就定义好的,这很符合工厂方法模式。更形象地说,AOP代理对象通过Java的反射机制,在运行时创建了一个代理对象,在代理对象的目标方法中根据业务要求织入了相应的方法。这个对象在Spring中就是——ProxyFactoryBean。

所以,FactoryBean为我们实例化Bean提供了一个更为灵活的方式,我们可以通过FactoryBean创建出更为复杂的Bean实例。

BeanFactory和FactoryBean的区别相关推荐

  1. factorybean 声明_阿里面试题:BeanFactory与FactoryBean的区别

    作者:至尊宝 来源:cnblogs.com/aspirant/p/9082858.html BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的 ...

  2. Spring源码分析-从源码看BeanFactory和FactoryBean的区别

    导语   在使用Spring 中最为核心的操作就是Bean的创建以及使用.下面就来带着大家一起来分析一下关于Spring的Bean的加载相关的知识 文章目录 BeanFactory getBean方法 ...

  3. Spring中 BeanFactory 与 FactoryBean 的区别

    作者:叁滴水 blog.csdn.net/qq_30285985/article/details/115433099 文章目录 前言 为什么会有FactoryBean? 通过源码深入学习Factory ...

  4. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

    1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂.在Spring中,BeanFactory是IOC容器的核心接口,它的 ...

  5. BeanFactory与FactoryBean的区别

    spring不允许我们直接操作 BeanFactory  bean工厂,所以为我们提供ApplicationContext 这个接口 此接口继承BeanFactory 接口,ApplicationCo ...

  6. Spring中BeanFactory和FactoryBean的区别

    先介绍一下Spring的IOC容器到底是个什么东西,都说是一个控制反转的容器,将对象的控制权交给IOC容器,其实在看了源代码之后,就会发现IOC容器只是一个存储单例的一个ConcurrentHashM ...

  7. SpringBoot : BeanFactory和FactoryBean的区别

    1.美图 2.BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂.在Spring中,BeanFactory是IOC容器的核心接 ...

  8. BeanFactory 简介以及它 和FactoryBean的区别

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  9. java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别

    以前刚转Java的时候去面试被问到过Spring中FactoryBean与BeanFactory的使用及区别,由于之前没有重视这两个的区别,只是在配置文件里面加bean结点并通过注解的形式调用,所以被 ...

最新文章

  1. 2021年大数据ZooKeeper(一):ZooKeeper基本知识
  2. 武大+CMU最新开源!全面支持平面/鱼眼/球面相机的实时统一线段检测算法
  3. Google Maglev 牛逼的网络负载均衡器(转)
  4. mvc框架异常处理机制
  5. RocketMQ是怎么存储消息的?
  6. 洞仙歌·冰肌玉骨 [宋] 苏轼
  7. mysql无法连接10061错误1067_解决MySQL启动的error 2003和1067 10061错误问题
  8. 使用jquery获取ul中当前正在点击的li的索引
  9. EDA技术实用教程 | 复习六 | 过程语句always
  10. java放大镜怎么写,JavaScript简单实现放大镜效果代码
  11. Win8系统108个运行命令
  12. ARM公司发展历程 - 从1985年至今
  13. 基于ssm企业后勤订餐管理系统的设计与实现-计算机毕业设计源码+LW文档
  14. FineReport html5图表简介
  15. C罗8000W英镑到底是多少钱?!
  16. 8051单片机Proteus仿真与开发实例-74LS378触发器驱动仿真
  17. 【springboot】上传并解析excel表,使用postman测试上传文件,解决excel版本报错问题
  18. java版Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务源码
  19. skype安卓手机版_最新手机系统——安卓Q尝鲜版体验
  20. 作为程序员,要保持工作和家庭平衡,就那么难么?

热门文章

  1. 生产线平衡率如何判断?判断生产线平衡的指标有哪些?
  2. 生产线平衡如何改善?详解:生产线平衡优化改善方法与措施!
  3. 剖析外汇市场的发展前景
  4. btstack ble ota开发笔记(1)-nordic dfu移植
  5. Unity官网赛车教程第二部分—调整赛车
  6. oracle impdp优化,ORACLE IMPDP优化调整
  7. WEB数据库管理平台kb-dms:数据统计【十二】
  8. 漫步者蓝牙自动断开_漫步者冇心版真无线蓝牙耳机,是否是你理想的真无线蓝牙耳机?...
  9. 基于hsv颜色空间的图像分割
  10. 【每天学习一点新知识】你分得清进程、线程和协程吗?