-
BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
-
BeanFactoryPostProcessor.postProcessBeanFactory
-
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation 通过Class创建了代理对象
-
创建了Bean
-
MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition
-
InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation
-
InstantiationAwareBeanPostProcessor.postProcessProperties
-
属性注入
-
if (bean instanceof BeanNameAware) { ((BeanNameAware) bean).setBeanName(beanName); } if (bean instanceof BeanClassLoaderAware) { ClassLoader bcl = getBeanClassLoader(); if (bcl != null) { ((BeanClassLoaderAware) bean).setBeanClassLoader(bcl); } } if (bean instanceof BeanFactoryAware) { ((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this); }
-
BeanPostProcessor.postProcessBeforeInitialization
-
检查Bean是否实现了InitializingBean,实现了则调用afterPropertiesSet方法
-
如果BeanDefinition中定义了InitMethod, 调用InitMethod
-
BeanPostProcessor.postProcessAfterInitialization
-
SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference
-
检查Bean是否实现了SmartInitializingSingleton,实现了就调用afterSingletonsInstantiated
总结:
bean工厂BeanDefinition注册方法=》bean工厂postProcess方法=》实例化前=》创建bean=》处理BeanDefinition=》实例化后=》属性注入=》初始化前=》初始化后