Bean後置プロセッサ-I n s t a n tiationAwareBeanPostProcessor#postProcessAfterInstantiation
3736 ワード
コードクリップ:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
戻り値がfalseの場合、ここで属性注入方法を終了します:populateBean
ここでは、コンテナ内のバックグラウンドプロセッサを巡回する、条件を満たすpostProcessAfterInstantiation()メソッドを呼び出す.
デバッグにより、3つのバックグラウンドプロセッサが条件を満たすことが明らかになりました.呼び出しの順序は次のとおりです.
1.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor
2.CommonAnnotationBeanPostProcessor
3.AutowiredAnnotationBeanPostProcessor
前に呼び出したI n s t a n t i a tionAwareBeanPostProcessorのバックグラウンドプロセッサによると、ここでは何もしないと推定できる.
スプリングの流れがまだ終わっていないので、どうして終わることができますか.
ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {
for (BeanPostProcessor bp : getBeanPostProcessors()) {
if (bp instanceof InstantiationAwareBeanPostProcessor) {
InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;
// false,
if (!ibp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)) {
return;
}
}
}
}
戻り値がfalseの場合、ここで属性注入方法を終了します:populateBean
ここでは、コンテナ内のバックグラウンドプロセッサを巡回する、条件を満たすpostProcessAfterInstantiation()メソッドを呼び出す.
boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException
デバッグにより、3つのバックグラウンドプロセッサが条件を満たすことが明らかになりました.呼び出しの順序は次のとおりです.
1.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor
2.CommonAnnotationBeanPostProcessor
3.AutowiredAnnotationBeanPostProcessor
前に呼び出したI n s t a n t i a tionAwareBeanPostProcessorのバックグラウンドプロセッサによると、ここでは何もしないと推定できる.
スプリングの流れがまだ終わっていないので、どうして終わることができますか.
ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor
ここでは、親によって作成されます.
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter#postProcessAfterInstantiation @Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
何もしてない
CommonAnnotationBeanPostProcessor @Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) {
return true;
}
何もしてない
AutowiredAnnotationBeanPostProcessor
親によって作成されます.
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter @Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
私が思ったように、ここは何もしていません.このように残っているのはspring拡張用だと思います.
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) {
return true;
}
何もしてない
AutowiredAnnotationBeanPostProcessor
親によって作成されます.
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter @Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
私が思ったように、ここは何もしていません.このように残っているのはspring拡張用だと思います.
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}