Spring的bean创建过程
步骤 执行过程 描述
1 ThreadLocal.set bean创建之前将beanName的一些属性放进ThreadLocal,避免多线程创建bean导致问题,并发创建会抛BeanCurrentlyInCreationException异常
2 InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation bean创建之前的回调,如果该方法返回不为null则不进行bean的创建过程,完成到第13步
3 MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition bean创建之后的回调,处理bean的合并,如Autowire注释的处理器处理注入信息
4 InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation bean创建之后的回调,如果该方法返回true,则不会进行第5、6步
5 InstantiationAwareBeanPostProcessor.postProcessPropertyValues 处理BeanDefinition的PropertyValues,为下一步注入属性打基础
6 BeanWrapper.setPropertyValues 注入依赖:根据上一步处理的结果(即PropertyValues),将bean的属性(字段)赋值
7 BeanNameAware.setBeanName bean实现了BeanNameAware接口则会调用
8 BeanClassLoaderAware.setBeanClassLoader bean实现了BeanClassLoaderAware接口则会调用
9 BeanFactoryAware.setBeanFactory bean实现了BeanFactoryAware接口则会调用
10 BeanPostProcessor.postProcessBeforeInitialization

初始化方法调用之前的回调,这其中有个processor进行接口方法回调,执行EnvironmentAware、EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware对应方法

11 InitializingBean.afterPropertiesSet 调用bean的初始化方法,bean实现了InitializingBean接口则会调用afterPropertiesSet方法,PostConstruct注释修饰的方法也会被当做初始化方法
12 BeanPostProcessor.postProcessAfterInitialization 初始化方法调用之后的回调
13 FactoryBean.getObject 如果返回的对象是FactoryBean,则进一步调用FactoryBean的getObject方法并最终返回此方法返回的对象,否则直接返回原对象
14 ThreadLocal.remove bean创建完成之后清空ThreadLocal
15 ConcurrentHashMap.put 如果是单例模式的bean的则放入map缓存类中

spring的bean创建过程的更多相关文章

  1. Spring MVC 学习 -- 创建过程

    Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...

  2. Spring 源码 (1)Spring IOC Bean 创建的整体流程

    Spring IOC 中涉及的重要接口 BeanDefinition Bean的描述信息,实现类包括 RootBeanDefinition 和 GenericBeanDefinition,Bean的描 ...

  3. Spring装配Bean的过程补充

    对上一篇的<Spring装配Bean的过程>的过程说一下,不然真产生了误区. 误区在哪里呢?那就是spring bean的作用域问题. 说哈常用的两种作用域:默认是scope = sing ...

  4. Spring装配Bean的过程

    首先说一个概念:“懒加载” 懒加载:就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. spring配置文件中be ...

  5. Spring的bean创建详解

           IoC容器,又名控制反转,全称为Inverse of Control,其是Spring最为核心的一个组件,其他的组件如AOP,Spring事务等都是直接或间接的依赖于IoC容器的.本文主 ...

  6. spring中Bean创建

    Spring中bean的加载过程: 1.获取配置文件资源 2.对获取的xml资源进行一定的处理检验 3.处理包装资源 4.解析处理包装过后的资源 5.加载提取bean并注册(添加到beanDefini ...

  7. spring cloud 项目创建过程

    在使用spring cloud 项目创建微服务项目时,遇到过很多坑,现在我将整理如下: 条件:Idea 开发工具 maven 项目 1. 创建一个空的mvn项目. 2. 创建完了就添加Module,首 ...

  8. Spring的bean创建方式ref使用方法

    java public class UserServiceImp implements UserService{ private UserDao userDao =null; public void ...

  9. Spring-IOC bean 创建过程中的 ObjectFactory

    AbstractBeanFactory中doGetBean方法里有一段拿到RootBeanDefinition后,实例化该bean的方法 // Create bean instance. if (mb ...

随机推荐

  1. [ZOJ 4016] Mergable Stack

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 直接用栈爆内存,看网上大神用数组实现的,构思巧妙,学习了! ...

  2. Unity3D制作红色射线

    1.在发射射线的位置创建一个空物体用于存储发射点的位置信息. 2.制作射线,为发射射线物体添加LineRenderer组件  制作Material材质并把其类型改为Particles/Addictiv ...

  3. thinkphp3.2升级至thinkphp5.0.24

    view文件 修改文件名 把tp3.2.3\app\module\view文件夹下所有文件夹拷贝至tp5\app\module\view 打开cmd命令窗口,cd至view文件夹下,执行dir /b ...

  4. Vue-admin工作整理(十四):Vuex和双向绑定

    概述,普通的直接通过input修改值然后取是不符合vue的规格的,所有数据定义和传递必须通过actions或者mutation来做 思路:通过在mutation层对字段进行定义值,在store中通过v ...

  5. SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.

    SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ...

  6. Confluence 6 升级以后

    7. 拷贝你的数据库驱动 如果你现在使用的是 Oracle 或者 MySQL 数据库的话,你讲要重新拷贝 jdbc 驱动的 jar 文件到你已经存在的 Confluence 安装目录中 conflue ...

  7. document.documentElement.clientHeight和document.body.clientHeight区别

    首先了解下document HTML DOM 节点 在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点: 文档是一个文档节点. 所有的HTML元素都是元 ...

  8. helm安装redis+Sentinel集群搭建

    一.redis集群特点 数据 在多个Redis节点之间自动分片 sentinel特点: 它的主要功能有以下几点 不时地监控redis是否按照预期良好地运行; 如果发现某个redis节点运行出现状况,能 ...

  9. grunt,提示node不是内部命令也不是外部命令

    昨天配vue环境,把环境变量改错了.今天grunt报错了,百度一下,就好啦. https://blog.csdn.net/qq_37248318/article/details/80839564 这个 ...

  10. Django_创建项目

    安装django pip install Django 将下面路径添加到系统环境变量的path中 C:\Users\12978\AppData\Local\Programs\Python\Python ...