【spring】BeanPostProcessor使用场景之@Autowired

在BeanPostProcessor简介中简单的介绍了BeanPostProcessor及其子接口InstantiationAwareBeanPostProcessor的用法。对于InstantiationAwareBeanPostProcessor简单的来说,就是在bean实例化之前会调用postProcessBeforeInstantiation方法,在实例化之后会调用postProcessAfterInstantiation、postProcessPropertyValues方法,然后在初始化之前会调用postProcessBeforeInitialization方法,后调用bean的afterPropertiesSet、ini method方法,在初始化之后调用postProcessAfterInitialization方法。


在使用spring构建企业级项目的时候,相信大家都习惯使用@Component @Controller @Service @Repository @Autowired 等注解来便捷开发,下面来探讨BeanPostProcessor在@Autowired 中的运用.


在使用@Autowired之前需要在容器中配置AutowiredAnnotationBeanPostProcessor,spring 3.X 、4.X有多种注入方法,这里不详说,AutowiredAnnotationBeanPostProcessor实现了InstantiationAwareBeanPostProcessor接口,在postProcessPropertyValues方法中实现了属性注入逻辑,即在完成了bean的实例化之后实现了属性注入。


1:首先会去搜集需要注入的属性将其保存到InjectionMetaData中

【spring】BeanPostProcessor使用场景之@Autowired_第1张图片

【spring】BeanPostProcessor使用场景之@Autowired_第2张图片

【spring】BeanPostProcessor使用场景之@Autowired_第3张图片

在搜集需要注入的属性时,会先去缓存中获取,当缓存中有时直接返回,如没有则通过反射获取需要注入的属性放入缓存后返回。

2:将搜集好需要注入的属性至InjectionMetaData后,会遍历每一个InjectedElement.inject()方法去注入

【spring】BeanPostProcessor使用场景之@Autowired_第4张图片

3:在InjectedElement.inject()方法中通过反射实现注入

【spring】BeanPostProcessor使用场景之@Autowired_第5张图片


你可能感兴趣的:(spring)