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,则不会进行第五、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缓存类中
相关文章
相关标签/搜索