Bean的实例化过程所调用的部分后置处理器
1. InstantiationAwareBeanPostProcessor
postProcessBeforeInstantiation
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInstantiation
判断是否需要增强,在aop的场景下,如果一个类中有@Pointcut,@Aspect等注解,或者是启动类等等 ,就可以确定这个类一定不需要增强,会存储在一个map里
在目标对象实例化之前调用,方法的返回值类型是Object,我们可以返回任何类型的值。由于这个时候目标对象还未实例化,所以这个返回值可以用来代替原本该生成的目标对象的实例(一般都是代理对象)。如果该方法的返回值代替原本该生成的目标对象,会把返回的对象放到容器中后续只有BeanPostProcessor的postProcessAfterInitialization方法会调用,其它方法不再调用;否则按照正常的流程走.
2. SmartInstantiationAwareBeanPostProcessor
determineCandidateConstructors
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
org.springframework.bea