【直播模拟源码】【京东安卓源码】【彩虹社区3.2源码】getbean源码解析

1.Spring之FactoryBean
2.spring源码解析bean初始化与依赖注入四
3.Spring 中 个getBean 的作用
4.Spring源码-09-Bean工厂之getBean方法

getbean源码解析

Spring之FactoryBean

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

        FactoryBean接口对于Spring框架来说占用重要的地位,Spring本身就提供了特别多的FactoryBean的实现。它们隐藏了实例化复杂bean的细节,给上层应用带来了便利。FactoryBean的源码如下:

        在该接口中定义了三个方法:

        当配置文件中 <bean> 的class属性配置实现的是FactoryBean时,通过getBean()方法返回的不是 FactoryBean 本身,而是 FactoryBean 的 getObject() 方法返回的对象。

        例如使用传统的方式配置下面的Student的 <bean> 的时,Student的每一个属性都会对应一个 <property> 元素的标签。

        如果使用FactoryBean的方式实现就更灵活一些,通过下面的逗号分隔符的方式一次性地为Student的所有属性指定配置值:

        有了这一个StudentFactoryBean后,就可以在配置文件中使用下面的这种方法配置StudentBean了。

        当调用 getBean("student") 时,Spring通过反射机制发现 StudentFactoryBean#getObject() 方法的返回。如果希望获取 StudentFactoryBean 的实例,则需要使用 getBean(beanName) 方法时在beanName前显示的加上 "&" 前缀,例如 getBean("&student") 。

spring源码解析bean初始化与依赖注入四

       深入解析Spring源码的码解bean初始化与依赖注入部分,我们将继续从上一篇文章的码解

       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean方法入手。

       随后,码解方法调用

       org.springframework.beans.factory.support.AbstractBeanFactory#registerDisposableBeanIfNecessary进行注册

       紧接着,码解调用

       org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean获取bean实例。码解

       在这一过程中,码解直播模拟源码我们到达了

       org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#destroySingleton用于销毁单例bean。码解

       然后,码解再次深入

       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean方法进行bean的码解创建。

       紧接着,码解调用

       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation对bean进行前置解析。码解

       之后,码解再次返回

       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean进行bean实例化。码解

       然后,码解调用

       org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean再次获取bean实例。码解

       紧接着,进入

       org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons进行单例bean的京东安卓源码预实例化。

       最终,完成bean的初始化后触发回调。

       返回

       org.springframework.context.support.AbstractApplicationContext#refresh执行上下文刷新,完成bean初始化与依赖注入。

       至此,本次关于Spring源码中bean初始化与依赖注入的解析告一段落,以上内容仅供学习参考。

Spring 中 个getBean 的作用

       getBean是用来获取applicationContext.xml文件里bean的,()写的是bean的id。

       ä¸€ç§æ˜¯singleton,一种是prototype,默认的是singleton,这种定义的bean实例的作用是与spring的容器一致的,只有spring容器初始化,调用getBean得到的singleton实例始终是同一个bean的实例spring定义的bean有两种作用范围,是每当调用getBean得到实例的时候spring都会new一个实例来给你,而prototype的实例。

Spring源码--Bean工厂之getBean方法

       Bean实例化与管理是彩虹社区3.2源码Spring框架的核心功能之一,其中getBean方法作为获取Bean实例的主要手段,具有重要意义。接下来,我们将深入探讨getBean方法及其相关实现,以期更好地理解Spring Bean工厂的工作机制。

       一、getBean方法

       getBean方法是Spring容器对外提供的一种接口,用于根据指定的esplise如何看源码Bean名称获取对应Bean实例。该方法会根据配置信息和缓存机制,找到并返回所需的Bean。

       二、doGetBean方法

       doGetBean方法是getBean方法的内部实现,负责处理Bean的查找、创建和返回工作。其流程分为以下几个关键步骤:

       1. getSingleton

       若Bean是单例且已存在,则直接返回缓存的定时跳转页源码实例,无需重新创建。

       2. createBean

       若非单例或未找到缓存实例,将进入创建Bean的流程。此过程涉及实例化、属性填充和初始化三个主要步骤。

       2.1 实例化

       通过调用对应的构造函数或使用默认构造函数创建Bean实例。

       2.2 三级缓存

       在实例化后,新创建的Bean会首先存储于缓存中,随后被添加到Bean作用域的缓存中,以备后续使用。

       2.3 属性填充

       通过依赖注入或属性设置方法填充Bean的属性值,确保其具有所需的功能。

       2.4 初始化

       执行Bean的初始化方法,实现任何特定的初始化逻辑,如配置文件加载或数据库连接等。

       三、流程图

       为了更直观地展示getBean方法的执行流程,以下流程图详细展示了从查找至返回Bean实例的全过程,包括缓存操作、实例化、属性填充和初始化等关键步骤。

       四、循环依赖示意图

       在处理循环依赖时,Spring容器会采取特定策略以避免无限循环。以下示意图展示了两个单例Bean(A和B)之间循环依赖的处理过程,以及Spring如何通过延迟初始化等机制解决这一问题。

       本文通过深入剖析getBean方法及其相关实现,旨在帮助开发者更好地理解Spring Bean工厂的工作机制。通过掌握这些关键概念与流程,可以更高效地利用Spring框架构建可维护且高性能的应用程序。

更多内容请点击【探索】专栏