美文网首页
Spring源码解析之BeanPostProcessor默认实现

Spring源码解析之BeanPostProcessor默认实现

作者: rice88 | 来源:发表于2020-09-21 01:51 被阅读0次

    源码版本4.3.10-RELEASE


    看看这张图,就知道spring有哪些默认实现的BeanPostProcessor了。

    其中,ApplicationContextAwareProcessor、ApplicationListenerDetector、LoadTimeWeaverAwareProcessor、ServletContextAwareProcessor、BeanPostProcessorChecker是spring硬编码进去的,我们一个一个地来看吧。


    1、ApplicationContextAwareProcessor在postProcessBeforeInitialization中处理ApplicationContextAware的回调。关于ApplicationContextAware后面也会单独开个文章来写一下。

    2、ApplicationListenerDetector用于处理ApplicationListener,后面也会单独写一下spring事件监听机制。

    3、LoadTimeWeaverAwareProcessor,对LoadTimeWeaverAware类型的bean设置LoadTimeWeaver,也就是类加载期织入,也是AOP相关,由AspectJ实现。

    4、ServletContextAwareProcessor,对ServletContextAware和ServletConfigAware的实现进行回调。

    5、BeanPostProcessorChecker是PostProcessorRegistrationDelegate的一个内部类,仅用于打印日志,没有实际作用。


    再看一下其他的实现。

    6、AbstractAdvisingBeanPostProcessor为AOP处理类,在postProcessAfterInitialization中返回代码对象。在AbstractAutowireCapableBeanFactory.createBean中有这么一段代码:

    // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.

    Object bean = resolveBeforeInstantiation(beanName, mbdToUse);

    if (bean != null) {

    return bean;

    }

    7、AdvisorAdapterRegistrationManager也是AOP相关,用于注册AdvisorAdapter。

    8、BeanValidationPostProcessor用于bean校验。

    9、BootstrapContextAwareProcessor对BootstrapContextAware的实现类进行回调。

    10、DestructionAwareBeanPostProcessor有4个实现类:

        10.1、ApplicationListenerDetector前面介绍过了,用于监听事件;

        10.2、InitDestroyAnnotationBeanPostProcessor处理注解@PostConstruct 和 @PreDestroy。

        10.3、ScheduledAnnotationBeanPostProcessor处理注解@Scheduled 。

        10.4、SimpleServletPostProcessor回调Servlet的init方法。

    11、MergedBeanDefinitionPostProcessor有5个实现类,其中有3个同时也是DestructionAwareBeanPostProcessor的实现类,别个2个是:

        11.1、AutowiredAnnotationBeanPostProcessor处理注解@Autowired。

        11.2、RequiredAnnotationBeanPostProcessor处理注解@Required。

    12、InstantiationAwareBeanPostProcessor有1个实现类CommonAnnotationBeanPostProcessor和1个接口SmartInstantiationAwareBeanPostProcessor:

    12.1、CommonAnnotationBeanPostProcessor同时继承了InitDestroyAnnotationBeanPostProcessor,更多的是偏向于父类的功能。

    12.2、SmartInstantiationAwareBeanPostProcessor的子类抽象类AbstractAutoProxyCreator及其实现类都是AOP相关。

    12.3、SmartInstantiationAwareBeanPostProcessor的另一个子类抽象类InstantiationAwareBeanPostProcessorAdapter及其子类都是处理相关注解@Autowired@Required@Import。


    end.

    相关文章

      网友评论

          本文标题:Spring源码解析之BeanPostProcessor默认实现

          本文链接:https://www.haomeiwen.com/subject/pmymyktx.html