spring 是如何实现依赖注入功能的呢?@Autowired 注解是如何生效的呢?这主要是通过 AutowiredAnnotationBeanPostProcessor 实现的,它继承了MergedBeanDefinitionPostProcessor和InstantiationAwareBeanPostProcessor两个接口,通过以下两个步骤来实现此功能。
解析注解
在postProcessMergedBeanDefinition方法中,在字段和方法上根据注解构造出注入元信息InjectionMetadata,并缓存起来。
注入属性
在postProcessPropertyValues方法中,取出缓存中的InjectionMetadata并通过它为bean注入属性。首先通过接口ConfigurableListableBeanFactory.resolveDependency获取依赖的属性值,然后通过反射为bean设置属性值。
@Value
在使用 DefaultListableBeanFactory 时发现,@Value注解也可以实现依赖注入功能,其效果等同于@Autowired,不太理解为何 AutowiredAnnotationBeanPostProcessor 要支持@Value。
网友评论