spring 是如何實現(xiàn)依賴注入功能的呢?@Autowired 注解是如何生效的呢兔港?這主要是通過?AutowiredAnnotationBeanPostProcessor 實現(xiàn)的批旺,它繼承了MergedBeanDefinitionPostProcessor和InstantiationAwareBeanPostProcessor兩個接口,通過以下兩個步驟來實現(xiàn)此功能。
解析注解
在postProcessMergedBeanDefinition方法中土童,在字段和方法上根據(jù)注解構(gòu)造出注入元信息InjectionMetadata,并緩存起來工坊。
注入屬性
在postProcessPropertyValues方法中献汗,取出緩存中的InjectionMetadata并通過它為bean注入屬性。首先通過接口ConfigurableListableBeanFactory.resolveDependency獲取依賴的屬性值王污,然后通過反射為bean設(shè)置屬性值罢吃。
@Value
在使用?DefaultListableBeanFactory 時發(fā)現(xiàn),@Value注解也可以實現(xiàn)依賴注入功能昭齐,其效果等同于@Autowired尿招,不太理解為何?AutowiredAnnotationBeanPostProcessor 要支持@Value。