Spring源码解析之BeanPostProcessor默认实现

源码版本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默认实现)