文档章节

bean的加载

杨肥麻
 杨肥麻
发布于 2017/04/10 00:16
字数 592
阅读 11
收藏 0

MyTestBean bean=(MyTestBean) bf.getBean(“meTestBean”);

getBean方法的doGetBean

方法里包含:

1.存在缓存

(1)getSingleton方法:缓存中获取单例bean

     SingletonObjects:一级缓存,先从此中获取实例

     earlySingletonObjects:二级缓存,如果一级缓存获取不到实例,再从此种获取实例

     singletonFactories:三级缓存,如果二级缓存获取不到实例,再从此种获取实例

(2)getObjectForBeanInstance方法:从bean的实例中获取对象

     对FactoryBean正确性的验证。

     对非FactoryBean不做任何处理。

     对bean进行转换。

     将从Factory中解析bean的工作委托给GetObjectFromFactoryBean.

     GetObjectFromFactoryBean:返回的bean如果是单例的,那就必须要保证全局唯一,同时因为是单例的,所以不必重复创建,可以使用缓存来提高性能。

     doGetObjectFromFactoryBean方法:

     factory.getObject();

     postProcessObjectFromFactoryBean

2.无缓存:

(1)getSingleton方法:检查缓存是否已经加载过,若没有加载,则记录beanName的正在加载状态。

     beforeSingletonCreation:加载单例前记录加载状态.

     singletonFactory.getObject();:实例化bean

     afterSingletonCreation:加载单例后处理方法调用,即移除缓存中对该bean正在加载状态的记录。

     addSingleton:将结果记录至缓存并删除加载bean过程中所记录的各种辅助状态。

3.准备创建bean

  CreateBean方法:

   resolveBeanClass:根据设置的class属性或者根据className来解析Class.

   mbd.prepareMethodOverrides:验证及准备覆盖的方法。对Override属性进行标记及验证。

   resolveBeforeInstantiation:给beanProcessors一个机会来返回代理来替代真正的实例。应用初始化前的后处理器,解析指定bean是否存在初始化前的短路操作。

   docreateBean:创建bean

循环依赖

4.创建bean

docreateBean方法:

(1)createBeanInstance方法:

  AutowireConstructor:带参数构造函数实例化

  instantiateBean:不带参数构造函数实例化

  循环依赖检查。

(2)populateBean方法:

InstantiationAwareBeanPostProcessor处理器的postProcessAfterInstantiation函数的应用,此函数可以控制程序是否继续进行属性填充。

autowireByName:属性注入(根据名称自动注入)

autowireByType:属性注入(根据类型自动注入)

InstantiationAwareBeanPostProcessor处理器的postProcessPropertyValues方法,对属性获取完毕填充前对属性的再次处理。

ApplyPropertyValues:将所有propertyValues中的属性填充至BeanWrapper.

(3)initializeBean:调用用户设置的初始化方法。

(4)registerDisposableBeanIfNecessary:注册后处理器来统一处理bean的销毁方法。

© 著作权归作者所有

上一篇: Spring IOC总结
下一篇: Oracle表连接方式
杨肥麻
粉丝 1
博文 76
码字总数 73837
作品 0
深圳
私信 提问
【死磕 Spring】—– IOC 之分析各 scope 的 bean 创建

原文出自:http://cmsblogs.com 在 Spring 中存在着不同的 scope,默认是 singleton ,还有 prototype、request 等等其他的 scope,他们的初始化步骤是怎样的呢?这个答案在这篇博客中给出。...

chenssy
2018/10/24
0
0
Spring容器加载和实例化bean的顺序

一、简介 在使用Spring时,Bean之间会有些依赖,比如一个Bean A实例化时需要用到Bean B,那么B应该在A之前实例化好。很多时候Spring智能地为我们做好了这些工作,但某些情况下可能不是,比如S...

嘴角轻扬30
01/02
269
0
【Spring】详解Spring中Bean的加载

之前写过bean的解析,这篇来讲讲bean的加载,加载要比bean的解析复杂些, 该文之前在小编原文中有发表过,要看原文的可以直接点击原文查看, 从之前的例子开始,Spring中加载一个bean的方式:...

weknow
2017/04/06
60
1
【死磕 Spring】—– IOC 之开启 bean 的加载

原文出自:http://cmsblogs.com (此图来自《Spring 揭秘》) Spring IOC 容器所起的作用如上图所示,它会以某种方式加载 Configuration Metadata,将其解析注册到容器内部,然后回根据这些信息...

chenssy
2018/10/18
0
0
Spring读书笔记——bean创建(上)

通过《Spring读书笔记——bean加载》和《Spring读书笔记——bean解析》,我们明白了两件事。 Spring如何加载消化一个xml配置文件 Spring如何将xml文件的各种标签转换为BeanDefinition并注册到...

Jackie_Zheng
2017/10/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
10
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部