Spring的属性注入一般会使用到的注解基本就@Value @Resource @Autowired 这几种,
属性注入的原理
第一步:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
第二步:核心都在这里 调用不同的
InstantiationAwareBeanPostProcessor 处理不同的属性注入
for (BeanPostProcessor bp : getBeanPostProcessors()) {
if (bp instanceof InstantiationAwareBeanPostProcessor) {
InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;
PropertyValues pvsToUse = ibp.postProcessProperties(pvs, bw.getWrappedInstance(), beanName);
if (pvsToUse == null) {
if (filteredPds == null) {
filteredPds = filterPropertyDescriptorsForDependencyCheck(bw, mbd.allowCaching);
}
pvsToUse = ibp.postProcessPropertyValues(pvs, filteredPds, bw.getWrappedInstance(), beanName);
if (pvsToUse == null) {
return;
}
}
pvs = pvsToUse;
}
}
例如:
CommonAnnotationBeanPostProcessor 是处理@Resource 注解
AutowiredAnnotationBeanPostProcessor 是处理 @Autowired @Value 注解的
|