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. io模型---非阻塞模型

    Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果 ...

  2. Dockerfile详解及优化

    Dockerfile详解 0. Dockerfile的作用 docker可以根据Dockerfile中的指令来构建docker镜像.Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的 ...

  3. spring mvc 简单的文件上传与下载

    上传文件有很多种方法,这里主要讲解的是spring mvc内提供的文件上传 前提使用:spring mvc 在这个之前我们需要把环境给配置好 1:springmvc的XML配置文件加上这一段就即可, ...

  4. react初探(二)之父子组件通信、封装公共组件

    一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...

  5. vue页面引入外部js文件遇到的问题

    问题一:vue文件中引入外部js文件的方法 //在vue文件中 <script> import * as funApi from '../../../publicJavaScript/pu ...

  6. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  7. 第一章 Java语言概述1

    1.人机交互有两种方法:一种是图形化界面,一种是命令行方式 2.如何打开命令行:开始-在运行命令行中输入cmd 3.常用的DOS命令: dir(directory):列出当前目录下文件及文件夹 md( ...

  8. ZooKeeper如何完成分布式锁?

    * 面试答案为LZ所写,如需转载请注明出处,谢谢. 1.最基本的思路: 将<local_ip>:<task_id>存在某个路径节点里. 刚开始并没有这个节点,当有executo ...

  9. flutter -------- ListView的使用

    学习了Flutter,来分享一下学习的一些常用的知识,先来说说ListView 案例效果: ListView是一个类似列的widget,它的内容对于其渲染框太长时会自动提供滚动. ListView 摘 ...

  10. [GXOI/GZOI2019]旧词

    很像LNOI 2014 LCA那道题. 同样的套路,离线以后直接扫描线. k=1的话就是原题. 考虑一般情况. 原本的做法是对x到根的这条链做一下区间+1操作,目的是为了是的在深度为i的位置得到的贡献 ...