熟悉spring的同学都知道,AutowiredAnnotationBeanPostProcessor之所以能被实例化,是因为spring会自动添加一个叫internalAutowiredAnnotationProcessor的属性,那这个东东是在哪添加的呢
debug跟随一个小案例看一下
{ ([] ) { .(., ); } }
走进run
( , ... ) { ( [] { }, ); }
继续深入
([] , [] ) { ().(); }
接着run
(... ) { .(); (); ; (); (); .(, .); { (); (, , ); (); (); (); .(.); (, , , , , ); (); (, ); .(.() ); (.) { (.).((), ); } .(, ); (, ); } ( ) { (, , ); (); } { .(.() ); .(, ); } ( ) { (, , ); (); } ; }
入口在context = createApplicationContext(),跟进去会发现调用的是
() { ..(.); }
再进去发现调动的是ApplicationContextFactory#create,下图1的位置,实际走的是2
进到AnnotationConfigServletWebServerApplicationContext
() { . (); . (); }
继续,new AnnotatedBeanDefinitionReader(this),看到了熟悉的东西AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry)
( , ) { .(, ); .(, ); . ; . (, , ); .(.); }
就是它了registerAnnotationConfigProcessors
( ) { (, ); }
全文背诵,就是在这里一堆的internalXXXXXXXXXYYYY都是在此注册进BeanDefinitionRegistry的,然后在后续的refresh方法中的invokeBeanFactoryPostProcessors(beanFactory)中被实例化并调用,完成springboot的自动装配。
( , ) { (); ( ) { ((.() )) { .(.); } ((.() )) { .( ()); } } (); (.()) { (.); .(); .((, , )); } (.()) { (.); .(); .((, , )); } ( .()) { (.); .(); .((, , )); } ( .()) { (); { .(.(, ..())); } ( ) { ( , ); } .(); .((, , )); } (.()) { (.); .(); .((, , )); } (.()) { (.); .(); .((, , )); } ; }