源码版本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.
网友评论