Spring创建Bean主线
2017-08-07 17:16:41 45 举报
Spring创建Bean主流程,还有待完善,若有错误,希望有小伙伴能指正~
作者其他创作
大纲/内容
代理对象
applyPropertyValues注入属性
applyBeanPostProcessorsAfterInitialization
autowireByType
查找符合条件的advisors
无
autowire属性或者解析XML时的ref为RuntimeBeanReference
CGLIB方式产生实例
singleton
构造器.newInstance(arg)方式获取实例
RuntimeBeanReferenceRuntimeBeanNameReferenceBeanDefinitionHolderBeanDefinition(触发getBean())ManagedArrayManagedListManagedSetManagedMapManagedPropertiesTypedStringValue
getObjectForBeanInstance如果实例时FactoryBean,调用其getObject
initializeBean
无,实现了接口,jdk反射方式生成
scope.get(回调ObjectFactory的getObject())
其它如request等
AbstractAutoProxyCreatorcreateProxy引入切面
getSingleton()已经存在单例?
工厂方法instantiateUsingFactoryMethod
生成指定的bean
AbstractAutoProxyCreator的wrapIfNecessary代理处理
有or未实现接口?
findEligibleAdvisors查找Advisor切面
notEmpty
1.findCandidateAdvisors()查找候选Advisors,AspectJAdvisorFactory.isAspect()可判断2.findAdvisorsThatCanApply()通过canApply()匹配出所有符合条件的Advisors
构造器注入autowireConstructor
Bean实例
createBeanInstance
Prototype
applyBeanPostProcessorsBeforeInitialization默认无处理
BeanWrapper(Bean的包装)
AbstractBeanFactorygetBean
resolveValueIfNecessary解析所有的属性类型
resolveBeforeInstantiation,有特定的BeanPostProcessors可以短路自定义处理
doCreateBean
有
getSingleton(回调ObjectFactory的getObject())
autowireByName
bd.getMethodOverrides().isEmpty()是否有lookup-method或replace-method
Scope类型
empty
bean实例
简单方式instantiateBean
populateBean依赖检测、注入属性
createBean创建实例
收藏
收藏
0 条评论
回复 删除
下一页