spring bean 依赖注入的实现

spring 是如何实现依赖注入功能的呢?@Autowired 注解是如何生效的呢?这主要是通过 AutowiredAnnotationBeanPostProcessor 实现的,它继承了MergedBeanDefinitionPostProcessorInstantiationAwareBeanPostProcessor两个接口通过以下两个步骤来实现此功能。

解析注解

在postProcessMergedBeanDefinition方法中,在字段和方法上根据注解构造出注入元信息InjectionMetadata,并缓存起来。

注入属性

在postProcessPropertyValues方法中,取出缓存中的InjectionMetadata并通过它为bean注入属性。首先通过接口ConfigurableListableBeanFactory.resolveDependency获取依赖的属性值,然后通过反射为bean设置属性值。

@Value

在使用 DefaultListableBeanFactory 时发现,@Value注解也可以实现依赖注入功能,其效果等同于@Autowired,不太理解为何 AutowiredAnnotationBeanPostProcessor 要支持@Value。

你可能感兴趣的:(spring bean 依赖注入的实现)