spring依赖注入populateBean

上篇文章讲到

spring创建对象

创建完对象完毕之后,就要对类的属性进行注入了,这就是属性注入

代码示例

@Component
public class BeanA {
	@Autowired
	private BeanB beanB;
}
@Component
public class BeanB {
}

我们以最简单的例子来观察源码,是怎么注入的

入口

在创建完毕对象后,即刻就要对对象进行属性注入

  • org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

for (BeanPostProcessor bp : getBeanPostProcessors()) {
				if (bp instanceof InstantiationAwareBeanPostProcessor) {
					InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;
					//依赖注入过程,@Autowired的支持 属性对,bean的实例对象,beanName
					PropertyValues pvsToUse = ibp.postProcessProperties(pvs, bw.getWrappedInstance(), beanName);
					if (pvsToUse == null) {
						if (filteredPds == null) {
							filteredPds = filterPropertyDescriptorsForDependencyCheck(bw, mbd.allowCaching);
						}

						//老版本用这个完成依赖注入过程,@Autowired的支持
						pvsToUse = ibp.postProcessPropertyValues(pvs, filteredPds, bw.getWrappedInstance(), beanName);
						if (pvsToUse == null) {
							return;
						}
					}
					pvs = pvsToUse;
				}
			}
  • 搞一个条件断点

在这里插入图片描述
断点之后发现有很多个实现,我们直接从字面意思去看org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor#postProcessProperties
在这里插入图片描述

  • 我们直接来到实现的代码
    在这里插入图片描述
  • 走过这行代码后,这个metaData的属性栏里面多了一个member需要注入的
    在这里插入图片描述
  • 这个时spring只要拿着这个对象的类型或者名称去容器里面去找就可以了
    在这里插入图片描述
    就相当于进行一次getBean操作了,这也是spring为什么会有循环依赖问题的原因,bean完全创建完成,触发依赖对象的创建,依赖对象可能还有依赖对象,这样就容易造成循环依赖问题了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值