spring ioc容器刷新的过程中涵盖了bean对象的创建流程,再bean对象创建的过程中,使用了哪些后置处理器(扩展接口)?这些后置处理器又有什么作用?下图为spring容器刷新过程中,各处理器的位置。
本文着重对BeanDefinitionRegistryPostProcessor、MergedBeanDefinitionPostProcessor、InstantiationAwareBeanPostProcessor三个后置处理器进行介绍。
(1)BeanDefinitionRegistryPostProcessor其主要实现类为spring内部提供的ConfigurationClassPostProcessor。
ConfigurationClassPostProcessor的作用就是根据我们的主配置类生成一些列我们定义的BeanDefinition,最终存入BeanDefinition集合中,以便后续生成bean对象时使用。其源码如下:
(2)MergedBeanDefinitionPostProcessor的执行处于bean对象实例化完成后,属性填充前,其主要作用是对一些注解信息进行解析缓存,以便后面bean对象属性填充时直接使用。实现类主要包括:CommonAnnotationBeanPostProcessor:主要用来处理@PostConstruct 、@PreDestroy 、@Resource注解;AutowiredAnnotationBeanPostProcessor :处理 @Autowired 、@Value;PersistenceAnnotationBeanPostProcessor :处理@PersistenceContext 、@PersistenceUnit。
(3)InstantiationAwareBeanPostProcessor该接口主要围绕bean对象实例化前后被调用,内部包含三个方法:postProcessBeforeInstantiation方法(实例化前被调用)、postProcessAfterInstantiation(实例化后被调用)、postProcessProperties(属性填充时被调用)。本文主要是对postProcessProperties进行讲解。其典型实现类为:AutowiredAnnotationBeanPostProcessor处理被@Autowired注解修饰的方法和属性字段。CommonAnnotationBeanPostProcessor处理被@Resource注解修饰的方法和属性字段。
注意:此处是将MergedBeanDefinitionPostProcessor解析缓存的信息,填充到bean对象的属性中。
如果您希望更深入地学习Spring源码,我强烈推荐您访问以下项目链接:https://gitee.com/chengyadong555/spring-framework.git。在这个项目中,对Spring的源码进行了逐行分析,作者不仅提供了丰富的注释,还融入了自己独到的理解和见解。这将是一个极好的学习资源,帮助您更好地掌握Spring框架的内部机制和设计理念。
标签:对象,spring,bean,Bean,源码,处理器,Spring From: https://blog.csdn.net/qq_26733517/article/details/144167821