孙哥Spring源码第22集

第22集 refresh-registerBeanPostPrcoessor

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】
孙哥Spring源码第22集_第1张图片

1、registerBeanPostPrcoessor的作用

实例化【放入singleObjects,放入beanPostProcessors】: AutowiredAnnotationBeanPostProcessor【@Value @Autowired】,CommonAnnotationBeanPostProcessor【@Resource @PostConstruct @PreDestroy】
【AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor】的执行是在初始化beanPostPrcessorAfter中执行的还有程序员开发的通过@Component修饰的BeanPostProcessor,会在invokeBeanFactoryPostProcessors方法中完成注册。

2、所有的BeanPostProcessor会不会在这个方法registerBeanPostPrcoessor执行过程中被调用?

一定是不会调用,仅仅是注册,并且注册到 DefaultListableBeanFactory的beanPostProcessors属性,这里你需要知道注册和实例化是两个概念,这里的注册是注册【注册的不是BD是对象】+实例化,放到了singletonObjects和beanPostProcessors属性,也就是说singletonObjects有 beanPostProcessors一定有。

3、DefaultListableBeanFactory#

创建beanPostProcessor的两种途径,以及在什么地方调用。

注意:在registerBeanPostProcessors方法调用之前
我们spring提供的 2个内置的BeanPostProcessor
自己通过@Component注解 创建BeanPostProcessor仅仅是由BD存在,但是没有实例化

注意:注册的本质就是把对应的BeanPostProcessor注册到DefaultListableBeanFactory#
beanPostProcessor属性中
存在2种途径
add 进入
ApplicationContextAwareProcessor
ConfigurationClassPostProcessor#ImportAware
ApplicationListenterDetector
BD—SingletonObjects — 添加
Autowired
CommonAnnotation
@Component

注意:在这个方法注册的BeanPostProcessor最终在什么位置进行调用
bean对象 创建3个步骤中 初始化步骤完成调用
initializeBean
wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);

4、总结

孙哥Spring源码第22集_第2张图片

你可能感兴趣的:(spring,java)