Spring Bean 对象实例化实现过程图解 在 Spring 框架中,Bean 对象实例化是一个非常重要的过程,本文将详细介绍 Spring Bean 对象实例化实现过程图解,通过示例代码介绍了 Bean 对象实例化的整个过程,对大家的学习或者工作具有一定的参考学习价值。 BeanDefinitionRegistryPostProcessor 接口 在 Bean 对象实例化过程中,BeanDefinitionRegistryPostProcessor 接口扮演着重要的角色,该接口的调用分为三步:1、调用实现了 PriorityOrdered 排序接口;2、调用实现了 Ordered 排序接口;3、没有实现接口的调用。这个接口的主要作用是获取 BeanDefinitionRegistry 对象,然后通过这个对象获取到所有注册的 BeanDefinition 对象,从而实现对 BeanDefinition 对象的修改和新增操作。 BeanPostProcessor 的注册 在 Bean 对象实例化过程中,BeanPostProcessor 的注册也扮演着重要的角色。通过 Refresh().registerBeanPostProcessors 方法,拿到 BeanFactory 中所有注册的 BeanDefinition 对象的名称 beanName,然后判断是否实现了 PriorityOrdered 排序接口和 Ordered 排序接口,getBean 是将该 ppName 对应的 BeanDefinition 对象实例化,并将对应的 BeanPostProcessor 对象注册到 BeanFactory 中,BeanFactory 中有一个 list 容器接收。 getSingleton 方法 在 Bean 对象实例化过程中,getSingleton 方法是一个核心方法,该方法位于 AbstractBeanFactory.doGetBean 方法中。这个方法的主要作用是把 beanName 添加到 singletonsCurrentlyInCreation Set 容器中,在这个集合里面的 bean 都是正在实例化的 bean,就是实例化还没做完的 BeanName。然后调到 getObject 方法,完成 bean 的实例化。接下来 getObject 调用完后,就代表着 Bean 实例化已经完成了,这时候就需要删除 singletonsCurrentlyInCreation 中的 beanName,并将 bean 缓存到一级缓存中。 createBean 方法 createBean 方法是 Bean 对象实例化的核心方法,该方法位于 AbstractBeanFactory.doGetBean 方法中。这个方法的主要作用是把 bean 实例化,并且包装成 BeanWrapper。这个方法是反射调用类中的 factoryMethod 方法。需要注意的是@Bean 方法的原理,实际上 Spring 会扫描有@Bean 注解的方法,然后把方法名称设置到 BeanDefinition 的 factoryMethod 属性中,接下来就会调到上面截图中的方法实现@Bean 方法的调用。 determineConstructorsFromBeanPostProcessors 方法 determineConstructorsFromBeanPostProcessors 方法是 BeanPostProcessor 接口类的首次应用,最终会掉到 AutowiredAnnotationBeanPostProcessor 类的方法,在方法中会扫描有注解的构造函数然后完成装配过程。 Spring Bean 对象实例化实现过程图解是一个复杂的过程,需要了解 BeanDefinitionRegistryPostProcessor 接口、BeanPostProcessor 的注册、getSingleton 方法、createBean 方法和 determineConstructorsFromBeanPostProcessors 方法等知识点,才能更好地理解 Spring 框架的工作机理。
- 粉丝: 2
- 资源: 915
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助