bean创建
2020-07-22 11:48:12 0 举报
bean创建
作者其他创作
大纲/内容
createBeanInstance()
invokeAwareMethods()
factory.getbean()
applyBeanPostProcessorsBeforeInitialization()
factoryMethod参数解析
CommonAnnotationBeanPostProcessor.java
beanFactory.getBean()
findAutowiringMetadata()
addSingletonFactory()
instantiateUsingFactoryMethod()
registerDisposableBeanIfNecessary()
setBeanClassLoader()
调用bean实现BeanNameAware接口的方法
mbd.getBeanClass()
invokeCustomInitMethod()
实例化+ioc依赖注入完以后的调用
autowireConstructor()
ApplicationContextAwareProcessor
ioc依赖注入
determineConstructorsFromBeanPostProcessors()
descriptor.resolveCandidate()
initializeBean()
InitDestroyAnnotationBeanPostProcessor
使用反射,实例化对象,参数赋值
是
applyMergedBeanDefinitionPostProcessors()
AutowiredAnnotationBeanPostProcessor.java
结束
instantiateBean()
循环beanPostProcessors集合,调用该方法
对bean实现Aware接口方法的调用,如ApplicationContextAware,MessageSourceAware
doResolveDependency()
return
循环beanPostProcessors集合,查看是接口实现否需要依赖注入,只要一个实现为false,IOC依赖注入就结束了
instantiate()
最终触发参数的getBean()
否
循环beanPostProcessors集合
对bean中有@PostConstruct注解的方法调用
applyPropertyValues()
解析@Autowired注解
populateBean()
AutowiredFieldElement.inject()
AutowiredAnnotationBeanPostProcessor
@Autowired注解注入
基于配置的依赖注入
AutowiredMethodElement.inject()
获取已经包装好的对象
ConstructorResolver.instantiateUsingFactoryMethod()
如果xml bean配置了init-method方法,通过反射调用
如果是单例,添加到三级缓存,删除二级换,提前暴露,解决循环依赖的
收集当前类的构造方法是否有@Autowired注解
metadata.inject()
创建bean实例
判断bean是否实现了InitializingBean接口,直接调用afterPropertiesSet()方法
setBeanName()
对实现ImportAware接口的类setImportMetadata方法调用
@Autowired注解扫描
反射赋值
applyBeanPostProcessorsAfterInitialization()
ibp.postProcessAfterInstantiation()
对类中某些特殊方法的调用,比如@PostConstruct,Aware接口
createBean()
setBeanFactory()
AbstractAutowireCapableBeanFactory.doCreateBean()
ImportAwareBeanPostProcessor
是否配置了factory-bean属性
ibp.postProcessProperties()
invokeInitMethods()
循环beanPostProcessors集合获取有autowired注解的构造器
InitializingBean接口,afterPropertiesSet,init-method
注册bean销毁时的类DisposableBeanAdapter
DefaultListableBeanFactory.resolveDependency()
调用bean实现BeanClassLoaderAware接口的方法
调用bean实现BeanFactoryAware接口的方法
获取当前bean的class
无参构造函数实例化
0 条评论
回复 删除
下一页