zoukankan      html  css  js  c++  java
  • spring的bean创建过程

    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.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
    [转]用EA 建模设计Blog全过程
    下载页面
    Expression Studio 4 ultimate x86 下载含序列号
    ACS.NET缓存技术
    Case
    再谈C#中的委托,匿名方法和Lambda表达式
    代理服务器的设置
    软件架构师之职责范围和高级软件工程师的职责范围
    WPF博客
  • 原文地址:https://www.cnblogs.com/xiao-tao/p/10305201.html
Copyright © 2011-2022 走看看