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. Spring Boot 线程池

    参考 SpringBoot 线程池 程序猿DD-Spring Boot使用@Async实现异步调用:自定义线程池 如何优雅的使用和理解线程池 Spring Boot线程池的使用心得 博客园-Sprin ...

  2. Tag

    C# ASP.NET SQL SERVER .Net Entity Framework JS Question Records Others

  3. linux,vim和bash命令小册

    linux命令 命令 功能 cd old 进入old文件夹 ll -a 当前文件列表(包含隐藏文件) rm -rf old 删除old文件夹(包含子文件夹) mkdir old 新建old文件夹 ps ...

  4. EF中打印出执行sql语句

    不用非得去 SQL Server Profiler 中查看了 方法如下: dbContext.Database.Log+=c=>Console.WriteLine(c)

  5. UE4外包团队:更新一下UE4和Unity3D案例

    全部的贴图都是用出的法线贴图构建的话只用了阳光和天光,都是静态光源,视角是第一人称模板最后的效果嘛就是全4K,120帧,0错误0警告,场景小是小了点但是效果还不错. 工作活有时间更新,欢迎有UE4和U ...

  6. 在线批量将gps经纬度坐标转换为百度经纬度坐标

    1.首先打开百度api示例页面: 在浏览器地址栏中输入:http://developer.baidu.com/map/jsdemo.htm#a5_3 2.修改代码 如下图,将需要批量转换的坐标,按规则 ...

  7. 数据流中的中位数 Find Median from Data Stream

    2019-04-17 16:34:50 问题描述: 问题求解: class MedianFinder { PriorityQueue<Integer> smaller; PriorityQ ...

  8. iOS权限申请

    <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...

  9. IDEA永久激活方法

    Idea版本:2018.1.5 准备工作: 1.安装,从官网下载安装,点击进去之后,进行选择需要的版本 2.下载破解包: 链接:https://pan.baidu.com/s/1lCb0MGetP1_ ...

  10. javascript的几个知识点scoping, hoisting, IIFE

    Scoping--作用域 ES6之前只有函数作用域.ES6加入块级作用域.用let声名的变量是块作用域内有效,用var声名的变量在函数作用域与块作用域里有效. Hoisting--提升 Hoistin ...