需求
对添加了@Reference
注解的属性和方法依赖注入通过动态代理生成的接口实例。
Reference注入
- 通过
ImportBeanDefinitionRegistrar
注册一个InstantiationAwareBeanPostProcessorAdapter
的子类。 - 重写
InstantiationAwareBeanPostProcessorAdapter#postProcessPropertyValues
方法,spring会在初始化了java bean之后回调这个方法,在这个方法里我们可以来实现依赖注入。 - 构造一个
InjectionMetadata
,传入bean class以及InjectedElement
列表。 - 自定义
ReferenceInjectedElement
,继承InjectedElement
,重写InjectedElement#getResourceToInject
方法,通过@Reference
构造一个ReferenceBean
,通过其getObject
方法获取动态代理生成的实例。 - 解析java bean的属性和方法,将添加了
@Reference
注解的元素构造成一个ReferenceInjectedElement
。 - 调用
InjectionMetadata#inject
方法实现依赖注入。