springbean注入自定义beanPostProssors,并且这个类里面有注入其他bean的执行流程

入口,先处理有排序的
beanPostProssors,再处理无序的beanPostProssors
org.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors
----》
调用这个方法进行创建bean的流程
org.springframework.beans.factory.BeanFactory#getBean(java.lang.String, java.lang.Class)
----》
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
—》
将这个beanName的ObjectFactory进行处理
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>)
–》
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#beforeSingletonCreation
这个是往
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#singletonsCurrentlyInCreation 这个集合里面放正在创建中的bean
–》
然后执行ObjectFactory的getObject方法也就是执行
org.springframework.beans.factory.support.AbstractBeanFactory#createBean
–》
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
—》

这里发现这个bean正在创建过程中的单例bean,那么就将这个这个bean放到org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#singletonFactories 这个第三级缓存创建工厂中
// Eagerly cache singletons to be able to resolve circular references
// even when triggered by lifecycle interfaces like BeanFactoryAware.
boolean earlySingletonExposure = (mbd.isSingleton() && this.allowCircularReferences &&
isSingletonCurrentlyInCreation(beanName));
if (earlySingletonExposure) {
if (logger.isTraceEnabled()) {
logger.trace(“Eagerly caching bean '” + beanName +
“’ to allow for resolving potential circular references”);
}
addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));
}

—》
然后开始填充属性
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

—》
然后通过这个方法,去寻找要添加的属性的单例bean
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor#postProcessProperties

—》
经过一系列的调用,找到这个方法
org.springframework.beans.factory.config.DependencyDescriptor#resolveCandidate
–》
然后又走到了 getBean方法,然后又开始了bean的创建循环

到这里beanPostProcessor的创建注入过程结束了,然后才会去创建正常注入spring的bean
实际的方法还是在正常的这个入口进入
org.springframework.context.support.AbstractApplicationContext#onRefresh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值