当前位置: 首页 > news >正文

简单了解BeanFactory和FactoryBean的区别

文章目录

  • 引言
  • BeanFactory是什么?
  • FactoryBean是什么?
  • FactoryBean的核心方法
  • BeanFactory和FactoryBean的区别
  • 总结

引言

在Spring框架中,BeanFactory 是Spring IoC容器的核心接口,负责Bean的基本管理和提供,而FactoryBean则是一种特殊的Bean,用于自定义创建其他对象。

BeanFactory是什么?

BeanFactory是Spring IoC容器的基础接口,它定义了 IoC 容器的基本功能,包括Bean的实例化、配置和管理。简单来说,BeanFactory就是一个工厂,它根据配置文件( XML)或注解来创建和管理 Bean实例。

FactoryBean是什么?

FactoryBean是一个接口,当一个类实现FactoryBean时,它本身就是一个Bean,但它的作用是作为一个工厂来创建其他对象。Spring容器不会直接返回FactoryBean实例本身,而是返回其 getObject()方法所创建的对象。FactoryBean自定义Bean的创建逻辑,特别是对于复杂对象, 通过实现 getObject()、getObjectType()`和 isSingleton()方法来控制返回的对象。

FactoryBean的核心方法

FactoryBean 接口定义了三个主要方法,这些是实现时必须重写的:

package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";// 返回FactoryBean所创建的实际对象实例@NullableT getObject() throws Exception;// 返回getObject()方法所创建对象的类型(Class)@NullableClass<?> getObjectType();// 返回true表示单例(默认),false表示原型default boolean isSingleton() {return true;}
}

FactoryBean不是普通的Bean,它更像是一个“Bean 工厂”,Spring容器会调用其getObject() 方法来获取实际的Bean实例。

BeanFactory和FactoryBean的区别

方面BeanFactoryFactoryBean
角色IoC容器的核心接口,管理所有Bean特殊的Bean接口,用于创建其他对象
功能提供Bean的实例化和依赖注入实现工厂模式,返回自定义对象
返回类型通过getBean()返回 Bean 实例通过getObject()返回实际对象
使用场景为其实现类(ApplicationContext)提供基础功能用于复杂Bean创建,如代理或资源管理

本质上,BeanFactory是管理Bean的容器,而 FactoryBean 是一个Bean ,用于产生另一个对象。

总结

BeanFactory是Spring IoC容器的核心抽象,定义了容器的访问规范;FactoryBean是Spring 提供的一个特殊接口,提供了复杂对象创建的工厂模式实现,主要用来创建其他Bean。
普通Bean区别是:

  1. 普通 Bean 的 getBean() 拿到的就是Bean本身,而FactoryBean的 getBean()实际上返回的是 etObject()方法生产的对象。
  2. 如果要拿工厂本身,用 &beanName。
    它常用于代理对象或复杂 Bean 的创建,比如 MyBatis 的 Mapper、Spring AOP 代理等。

http://www.dtcms.com/a/336375.html

相关文章:

  • AMBA-AXI and ACE协议详解(八)
  • Critic-V: VLM Critics Help Catch VLM Errors in Multimodal Reasoning(CVPR 2025)
  • C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
  • Word和Excel的一些功能记录
  • PHP现代化全栈开发:测试驱动开发与持续交付实践
  • 重温k8s基础概念知识系列二(Pod)
  • 腾讯开源:视频生成框架Hunyuan-GameCraft
  • 说一下事件传播机制
  • LeeCode 39.组合总和
  • 第4章 鼎鼎大名的Reactor模式
  • Redis--day7--黑马点评--优惠券秒杀
  • steam_api64.dll丢失?steam_api64.dll修复工具
  • 837. 新 21 点
  • C语言基础:(十六)深入理解指针(6)
  • 在鸿蒙里优雅地处理网络错误:从 Demo 到实战案例
  • 基于粒子群优化算法优化支持向量机的数据回归预测 PSO-SVM
  • Java实战:数字转中文大写金额的完整实现与优化技巧
  • 偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记
  • bash shell 入门
  • rt-thread audio框架移植stm32 adc+dac,对接cherryusb uac,进行录音和播放
  • RTC之神奇小闹钟
  • 弱类型语言(Strong Typing)与强类型语言(Weak Typing)(描述语言对变量类型处理的严格程度)
  • 【Virtual Globe 渲染技术笔记】7 GPU 光线投射
  • 法拉第笼原理
  • Windows快捷方式添加命令行参数
  • 【备忘】superdesign如何使用?(UI设计)
  • 电脑上搭建HTTP服务器在局域网内其它客户端无法访问的解决方案
  • 钉钉退出后重新登录显示网络异常,解决方法(随手记)
  • 嵌入式LINUX——————TCP并发服务器
  • Python 设计模式详解 —— 掌握软件设计的通用解决方案