Spring源码笔记之SpringIOC--(3)什么是BeanFactory?

这篇具有很好参考价值的文章主要介绍了Spring源码笔记之SpringIOC--(3)什么是BeanFactory?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是BeanFactory?

BeanFactory是SpringIOC的最顶层接口,涵盖了IOC容器最基本的操作。ListableBeanFactoryConfigurableBeanFactory提供了IOC容器获取所有Bean、配置Bean的额外能力。所有BeanFactory的实现类持有所有Bean的定义BeanDefinition,用一个唯一的字符串(即Bean的名字)区分。BeanFactory提供单例Bean(singleton scope)与多例Bean的能力(prototype scope),自从Spring2.0后Bean的作用范围不单单局限于单例与多例,还具有提供请求(request)与对话(session)级别的范围。BeanFactory是IOC容器注册Bean的入口,也是Bean配置中心。

Spring官方推荐使用构造器注入或者Setter注入(push模式)而不是依赖Spring查找bean的注入模式(pull模式)下面是Spring原文

/* Note that it is generally better to rely on Dependency Injection
 * ("push" configuration) to configure application objects through setters
 * or constructors, rather than use any form of "pull" configuration like a
 * BeanFactory lookup. Spring's Dependency Injection functionality is
 * implemented using this BeanFactory interface and its subinterfaces.
 */

以上内容来自BeanFactory的代码注释与总结

查看BeanFactory源码

public interface BeanFactory {
    // 前缀表示,用于解引用FactoryBean,获取FactoryBean本身而不是由其创建的bean
    String FACTORY_BEAN_PREFIX = "&";
    
    // 指定名字getBean
    Object getBean(String name) throws BeansException;
    
    // 指定名字和类型getBean
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    
    // 指定名字getBean,args可以指定bean的构造器或者工厂方法的入参
    Object getBean(String name, Object... args) throws BeansException;
    
    // 指定类型getBean
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    // 指定类型getBean
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    // 指定类型获取bean的Provider,用于按需加载、懒加载等场景
    <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
    
    // 指定类型获取bean的Provider,ResolvableType作为通用类型入参,不支持bean的集合
    <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
    
    // 判断是否包含指定名称的bean 	
    boolean containsBean(String name);
    
    // 判断指定名称的bean是否是单例
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    
    // 判断指定名称的bean是否是多例
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    
    // 判断bean的名称与类型是否匹配
    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
    
    // 判断bean的名称与类型是否匹配
    boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
    
    // 获取指定名称bean的类型
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    
    // 获取指定名称bean的类型,是否允许其初始化是为了获取FactoryBean生成的类型
    Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
    
    // 获取bean的别名
    String[] getAliases(String name);
}

看完上述代码后可能会有几个问题:

  • 什么是FactoryBean?

FactoryBean是一个接口,用于定义实现工厂模式的Bean。它允许我们自定义Bean的实例化逻辑,从而对Bean的创建过程进行更多的控制。FactoryBean可以使得我们在Spring容器中使用非标准的Bean对象。

  • getBean(String name)getBean(String name, Class<T> requiredType)的区别?

getBean(String name, Class<T> requiredType)getBean(String name)能力基础上加了类型校验,保证获取的bean是期望的类型。如果类型不一致会抛出BeanNotOfRequiredTypeException

BeanFactory首先提供了多个getBean的方法,这也是IOC容器对外的核心能力。其次对Bean的作用范围(单例or多例)、Bean的类型、Bean的懒加载等提供了能力。文章来源地址https://www.toymoban.com/news/detail-830894.html

到了这里,关于Spring源码笔记之SpringIOC--(3)什么是BeanFactory?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度解析 Spring 源码:揭秘BeanFactory 之谜

    1.1 BeanFactory的概述 BeanFactory是Spring框架中的一个核心接口,它提供了一种灵活的方式来管理Bean,并实现了IoC(控制反转)和DI(依赖注入)等特性,为应用程序提供了灵活、可扩展的对象管理和配置机制。 BeanFactory的特性 : IoC容器: BeanFactory是Spring的IoC容器之一。IoC是一种

    2024年04月26日
    浏览(39)
  • spring的BeanFactory和applicationContext有什么区别?

            ApplicationContext是一次性立刻加载,比较 消耗资源 但是后续读取非常快,会将spring中所有的bean进行初始化,全部实例化到spring中!!属于 饿汉模式加载 。         Beanfactory是一个用来管理bean对象的工厂,加载bean的时候不会立刻一次性加载,使用的是 惰性加载 ,只有执

    2023年04月21日
    浏览(37)
  • 进阶Spring(2)-BeanFactory和ApplicationContext实现

    🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 🚗🚗为了让更多的人看到更优质的博客,阿杰正在努力的更新学习中心中的内容。 首先看代码 spring底层创建实体类就是

    2024年02月05日
    浏览(39)
  • Spring第二讲:SpringIoC控制反转、依赖注入

    4、1什么是IoC 在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。但在 Spring 应用中,Java 对象创建的控制权是掌握在 IoC 容器手里,开发者通过XML或注解的配置将Java对

    2024年02月13日
    浏览(46)
  • Spring环境搭建、SpringIOC容器基础、SpringDI基础

    IOC控制反转 DI依赖注入 作用:将所有JavaBean注入Spring容器中,进行==”解耦“==管理,在Spring中,万物皆为JavaBean 使用maven,在 pom.xml 文件中添加Spring坐标,即 添加 Spring依赖 在resource文件中新建配置文件,即 Spring框架的主配置文件 Spring的主配置文件就相当于 SpringIOC 容器 ,其

    2024年02月12日
    浏览(40)
  • 【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

    前言: 大家好,我是 良辰丫 ,我们在上一篇文章不是简单介绍了SpringBoot嘛,为什么不学习SpringBoot,而是要开始Spring呢?Spring是SpringBoot的前身,我们先学习以前的稍微复杂的框架,才能更好的学习SpringBoot.💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志

    2024年02月08日
    浏览(45)
  • FactoryBean和BeanFactory:Spring IOC容器的两个重要角色简介

    目录 一、简介 二、BeanFactory 三、FactoryBean 四、区别 五、使用场景 总结 在Spring框架中,IOC(Inversion of Control)容器是一个核心组件,它负责管理和配置Java对象及其依赖关系,实现了控制反转(Inversion of Control)和依赖注入(Dependency Injection)两个核心概念。 控制反转是一种设

    2024年02月11日
    浏览(34)
  • Mr. Cappuccino的第60杯咖啡——Spring之BeanFactory和ApplicationContext

    概述 BeanFactory,以Factory结尾,表示它是一个工厂类(接口), 它是负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖; BeanFactory只是个接口,并不是IOC容器的具体实现,但是

    2024年02月13日
    浏览(41)
  • Spring全家桶

    官网 Spring | Home Spring Framework :Spring Framework是最基础、最核心的Spring框架,提供了IoC(控制反转)和AOP(面向切面编程)等功能。它是其他Spring项目的基础,也是Spring生态系统的核心。 Spring Boot :Spring Boot是一个用于快速构建独立的、可执行的Spring应用程序的框架。它通过自

    2024年01月17日
    浏览(29)
  • 【Spring全家桶系列】Spring中的事务管理(基于注解完成实现)

    ⭐️ 前面的话 ⭐️ 本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍Spring中的事务管理,事务的概念与作用,以及Spring事务的属性和传播机制。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由 未见花闻 原创, CSDN 首发! 📆首

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包