beanPostProcessor在spring中是非常重要的存在,是spring给程序员扩展spring的方法,看源码的时候确实使用到的地方比较多,所以自己记录一下。
在循环依赖中,从earlySingletonFactoryBean中获取objectFactory时,在getObject之后会调用一把BeanPostProcessorAfterInstantiation
如果从bean缓存和提早暴露的缓存中没有找到bean,那么就要进行bean的创建了,在创建之前可以调用beanPostProcessor获取一个bean,并且短路掉bean的创建过程。 AOP就是在这里做的,可能通过jdk或者cjlib代理创建了一个代理类出来,这里调用了beanPostProcessor的postProcessorBeforeInstantiation和postProcessorAfterInstantiation方法,因为spring规定必须要走后置处理器,又因为他这个是短路操作,不走没机会走了,所以肯定是要走的
在创建完了bean实例(注意是实例,不是bean)之后,进行属性填充的时候,在把属性放到propertyValues之前,会调一把BeanPostProcessor
在把属性放到propertyValues之后,会调一把beanPostProcessor的方法,例如属性是否必需的验证就在这里做的
完成属性填充之后,在进行init-method之前会调一把beanPostProcessor的postProcessorBeforeInstantiation
在进行init-method之后会调一把beanPostProcessor的postProcessorAfterInstantiation
我只在源码里找到了一下六个地方,但是应该不止有六个,如果有大佬知道,欢迎补充。