Spring杂记BeanFactory之getBean方法
1.(BeanFactory) getBean(beanName)
2.(AbstractBeanFactory) doGetBean
3.(AbstractBeanFactory) transformedBeanName //如果是&beanName工厂类形式去掉第一个&
4.(AbstractBeanFactory) getSingleton
5.(DefaultSingletonBeanRegistry) getSingleton //从Map<String, Object> singletonObjects中获取实例如果存在的话(第一次不存在),有就返回
6.(AbstractBeanFactory) getParentBeanFactory //看父类中是否包含了该beanName对应的实例,有就返回
7.(AbstractBeanFactory) markBeanAsCreated(beanName) //this.alreadyCreated.add(beanName)
8.(AbstractBeanFactory) getMergedLocalBeanDefinition(beanName)
9.(AbstractBeanFactory) getMergedBeanDefinition(beanName, getBeanDefinition(beanName), null) //查看传入的bd是否有parentName,有的话需要合并。
10.(AbstractBeanFactory) mbd.setScope(RootBeanDefinition.SCOPE_SINGLETON); //!StringUtils.hasLength(mbd.getScope()),如果该bean内部包含了一个非单例bean就将该bean的scope修正为内部的bean的scope
11.(AbstractBeanFactory) this.mergedBeanDefinitions.put(beanName, mbd); //cache关系
12.(AbstractBeanFactory) checkMergedBeanDefinition(mbd, beanName, args) //查看mbd.isAbstract(),是就抛出异常
13.(AbstractBeanFactory) String[] dependsOn = mbd.getDependsOn(); //将依赖初始化
14.(AbstractBeanFactory) sharedInstance = getSingleton(beanName, new ObjectFactory<Object>() //如果是单例bean,就调用该方法
15.(DefaultSingletonBeanRegistry) Object singletonObject = this.singletonObjects.get(beanName); //有就返回
16.(AbstractBeanFactory) createBean(beanName, mbd, args)
17.(AbstractAutowireCapableBeanFactory) createBean
18.(AbstractAutowireCapableBeanFactory) mbd.prepareMethodOverrides
19.(AbstractAutowireCapableBeanFactory) resolveBeforeInstantiation(beanName, mbd) // Give BeanPostProcessors a chance to return a proxy instead of the target bean 如果这步有bean就返回
20.(AbstractAutowireCapableBeanFactory) doCreateBean(beanName, mbd, args)
21.(AbstractAutowireCapableBeanFactory) createBeanInstance
22.如果RootBeanDefinition mbd.getFactoryMethodName() != null就使用工厂方法初始化->instantiateUsingFactoryMethod(beanName, mbd, args)
23.如果发现是构造器模式走23.1,否则走23.2
23.1.1.(AbstractAutowireCapableBeanFactory) autowireConstructor(beanName, mbd, ctors, args);
23.1.2.(ConstructorResolver) autowireConstructor
23.1.3.(ConstructorResolver) this.beanFactory.getInstantiationStrategy().instantiate(mbd, beanName, this.beanFactory, constructorToUse, argsToUse);
23.1.4.(SimpleInstantiationStrategy) instantiate
23.2.1.(AbstractAutowireCapableBeanFactory) instantiateBean(beanName, mbd)
23.2.2.(AbstractAutowireCapableBeanFactory) beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, parent);
24.(AbstractAutowireCapableBeanFactory) populateBean(beanName, mbd, instanceWrapper);//填充属性
25.(AbstractAutowireCapableBeanFactory) initializeBean(beanName, exposedObject, mbd)
26.(AbstractAutowireCapableBeanFactory) invokeAwareMethods(beanName, bean)
27.(AbstractAutowireCapableBeanFactory) applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName)
28.(AbstractAutowireCapableBeanFactory) invokeInitMethods(beanName, wrappedBean, mbd)
29.(AbstractAutowireCapableBeanFactory) applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName)
30.(AbstractAutowireCapableBeanFactory) registerDisposableBeanIfNecessary(beanName, bean, mbd);
31.(DefaultSingletonBeanRegistry) addSingleton //this.singletonObjects.put,this.registeredSingletons.add
32.(AbstractAutowireCapableBeanFactory) getObjectForBeanInstance(sharedInstance, name, beanName, mbd) //如果beanName是&开头的就返回factoryBean
33.//如果传入的requiredType不为空,则调用 getTypeConverter().convertIfNecessary(bean, requiredType)
34. return bean
35. return bean
Spring杂记BeanFactory之getBean方法的更多相关文章
- Spring之BeanFactory:解析getBean()方法
初探getBean()方法 在使用Spring的时候可以通过如下方式调用getBean方法来获取某个Bean: User user = context.getBean(User.class); Abs ...
- 九、Spring之BeanFactory源码分析(一)
Spring之BeanFactory源码分析(一) 注意:该随笔内容完全引自https://blog.csdn.net/u014634338/article/details/82865644,写的 ...
- spring getbean 方法分析
spring 缺省: 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean实例 2.缺省采用单例模式 在最近的项目中 ...
- spring getbean 方法分析(很实用!)
十年阿里,就只剩下这套Java开发体系了 >>> 在最近的项目中,有个地方我们不得不实用getBean的方法,自己从Spring context中获取bean进行数据库操作. 方 ...
- Spring IoC getBean 方法详解
前言 本篇文章主要介绍 Spring IoC 容器 getBean() 方法. 下图是一个大致的流程图: 正文 首先定义一个简单的 POJO,如下: public class User { priva ...
- Spring ioc 源码分析之--beanFactory.registerResolvableDependency()方法
背景: 在spring ioc refresh()方法中,看到了如下逻辑: 要理解该逻辑的原理,先看场景:有个接口InterFaceA,它有2个实现类A1和A2 那么,如果一个类C 依赖了InterF ...
- 模拟Spring中的getBean方法
一直知道Spring是运用反射技术的,但具体怎么用呢?今天就模拟下getBean方法. 步骤: 1.用Dom4j解析xml配置文件,取出我们需要的信息 2.遍历Bean节点,根据每个Bean节点的cl ...
- 模拟Spring容器的getBean方法(Maven工程)
Spring容器的getBean方法是通过反射机制实现的,下面的测试程序模拟getBean的实现原理. 步骤一:pom.xml文件配置解析XML文件的dom4j.jar 步骤二:XML文件中配置bea ...
- Spring之BeanFactory及Bean生命周期
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...
随机推荐
- 227. Basic Calculator II 无括号版本计算器
[抄题]: Implement a basic calculator to evaluate a simple expression string. The expression string con ...
- laravel简书(1)
Laravel的社区生态 中文社区(http://laravel-china.org) 5.4中文文档(http://d.laravel-china.org/docs/5.4) Laravel源码地址 ...
- JavaSE基础知识(5)—面向对象(5.1类和对象概念、创建及内存分配)
一.类和对象的相关概念 1.面向对象和面向过程的理解 面向对象和面向过程都属于解决问题的思考方式.面向过程:以执行者的角度思考问题,侧重于“怎么做”,比较适合解决小型项目面向对象:以指挥者的角度思考问 ...
- JVM总括四-类加载过程、双亲委派模型、对象实例化过程
JVM总括四-类加载过程.双亲委派模型.对象实例化过程 目录:JVM总括:目录 一. 类加载过程 类加载过程就是将.class文件转化为Class对象,类实例化的过程,(User user = new ...
- ECMAscript,DOM,BOM哪个比较重要
ECMA > DOM > BOM ECMA是JS的核心,语法.变量.对象.各种对象的API.作用域.原型链.闭包.This指向.构造函数等等必须要熟练,有了这些基础你才能去熟练的操作DOM ...
- spring-boot json数据交互
SpringBoot学习之Json数据交互 最近在弄监控主机项目,对javaweb又再努力学习.实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据 ...
- 隔行变色---简单的css js控制table隔行变色
(1)用expression 鼠标滑过变色: <style type="text/css"><!-- table { background-color:#0000 ...
- 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场
判断终端的类型.安卓.ios.微信.qq function GetMobelType() { var browser = { ...
- Codeforces Round #536 (Div. 2)--1106D - Lunar New Year and a Wander
https://codeforces.com/contest/1106/problem/D 题意:求出字典序最小的走法 解法:走到每个点,都选取与这个点连通的序号最小的点,并且这个序号最小的点没有被访 ...
- 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引
[源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...