Spring源码解析-实例化bean对象
spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用。
@Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.准备刷新context prepareRefresh();// Tell the subclass to refresh the internal bean factory.刷新子类beanFactory,注册beanDefinitionConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context.准备beanfactory prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses. postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context. invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation. registerBeanPostProcessors(beanFactory);// Initialize message source for this context. initMessageSource();// Initialize event multicaster for this context. initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses. onRefresh();// Check for listener beans and register them. registerListeners();// Instantiate all remaining (non-lazy-init) singletons.初始化非懒加载的bean实例 finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event. finishRefresh();}catch (BeansException ex) {logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);// Destroy already created singletons to avoid dangling resources. destroyBeans();// Reset 'active' flag. cancelRefresh(ex);// Propagate exception to caller.throw ex;}}}
实例化bean对象,主要的是在
finishBeanFactoryInitialization(beanFactory)
方法。
大致的流程图(下部分):
(点击查看大图)
下面分析实例化bean对象的源码分析
加载bean对象:
在AbstractBeanFactory类中,根据不同scope进行实例化,例如Singleton,Prototype等
根据不同情况采用不同的代理方式:
到这里就是bean实例的初始化,可以看到spring采用的代理方式,来实现bean的初始化。
转载于:https://www.cnblogs.com/lzeffort/p/7669150.html
Spring源码解析-实例化bean对象相关推荐
- Spring源码阅读之bean对象的创建过程
Spring源码阅读之bean对象的创建过程 Spring是通过IOC容器来管理对象的,该容器不仅仅只是帮我们创建了对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.这种方式成为控制反转 ...
- Spring源码解析(五)-Bean的实例化流程(上)
在前面已经完成了对需要实例化bean的收集并封装成BeanDefinition,并且将BeanPostProcess等组件进行了提前实例化.接下来就到了容器启动的最后一步,也是最复杂的一步-实例化be ...
- Spring源码解析(七)-Bean属性间的循环依赖
首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...
- Spring源码解析之bean的销毁
阅读须知 Spring源码版本:4.3.8 文章中使用/* */注释的方法会做深入分析 正文 我们来看几个销毁bean的场景,在一些异常情况,例如Spring上下文初始化失败时,会销毁已经创建的单例b ...
- Spring源码解析之 Bean与BeanDefinition详解
文章目录 Spring解决的核心问题 Bean与BeanDefinition 代码验证BeanDefinition 代码运行测试 Spring容器主要流程 与BeanDefinition相关的类 At ...
- Spring源码解析:自定义标签的解析过程
2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...
- Spring源码解析-bean实例化
Spring源码解析-bean实例化 本文介绍Spring创建 bean 过程中的第一个步骤:实例化 bean. 1. Bean实例化源码 虽然实例化Bean有多种方式(包括静态工厂和工厂实例 ...
- Spring 源码解析 - Bean创建过程 以及 解决循环依赖
一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...
- 人人都能看懂的Spring源码解析,Spring如何解决循环依赖
人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...
最新文章
- 存储mysql数据存在特殊字符时处理_转义 存储数据时特殊符号的处理
- POJ 2749 Building roads 2-sat+二分答案
- OpenGL硬件加速指南
- 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
- 自律到极致-人生才精致:第2期
- 高薪Java工程师必看的书籍
- 如何定期备份网站数据
- Regulator的下载地址
- Bash脚本教程之字符串操作
- 如何创造具有竞争性的新品类?
- 输入设备名输入输出设备的重定向
- Cadence OrCAD Capture 锁定工程和图纸图文视频教程
- Directx使用基础
- 屏幕录像专家 - 视频压缩教程
- 电脑版的微信客户端也能刷朋友圈啦
- 坐标计算距离公式 火星坐标系_地图坐标转换 -- 火星坐标与GPS坐标
- 数据库——实体联系模型
- Visual Paradigm 里什么是复合结构图?
- 【raft】学习五:日志结构raftLog
- 计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档)
热门文章
- python figure函数 gui_python 在一个GUI内创建了2个figure,为什么只能显示第二个图?...
- linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软
- 嵌入式linux应用程序实例,嵌入式Linux应用程序访问物理地址的实例
- 【WebRTC---入门篇】(六)JavaScript基础
- php做一个网页的源代码,用HTML5做一个个人网站此文仅展示个人主页界面。内附源代码下载地址...
- 将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中
- android math类,GitHub - Zihin/MathModeling-Android
- vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...
- html编辑器不支持自定义样式,百度编辑器自定义按钮样式问题(写在cssRules不起做用)?...
- 64位 regsrv win10_Win10 64位安装个人版SQL2000图文教程