先总结: 该方法用于创建并注册Bean后处理器, 先获取创建beanFactory中的BeanPostProcessor, 排序后注册到beanFactory中(beanFactory.addBeanPostProcessor(postProcessor)), 用于后面创建bean对象时使用
注: 这里不会调用执行BeanPostProcessor, 在创建bean对象getBean->doGetBean的时候才会执行
1.获取beanFactory中所有实现了BeanPostProcessor接口的类
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
2.添加一个默认的BeanPostProcessorChecker(主要用于记录信息)到beanFactory中
beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));
3.顺序注册BeanPostProcessor
先注册实现了PriorityOrdered接口的
再注册实现了Ordered接口的
后注册其它未指定顺序的
最后注册实现了MergedBeanDefinitionPostProcessor(注:主要为spring内部的BeanPostProcessor)接口的
4.注册ApplicationListenerDetector到beanFactory中
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));
ApplicationListenerDetector用来检测bean是否实现了ApplicationListener接口,两个作用:
1、实例化完成之后,如果bean的单例的并且属于ApplicationListener接口,则加入到多播器中
2、bean销毁之前,如果bean是一个applicationListener,则从多播器中提前删除
标签:BeanPostProcessor,registerBeanPostProcessors,beanFactory,接口,bean,详解,注册,Applicati From: https://www.cnblogs.com/superpiter/p/18096198