熟悉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的自动装配。
(
, ) {
();
( ) {
((.() )) {
.(.);
}
((.() )) {
.( ());
}
}
();
(.()) {
(.);
.();
.((, , ));
}
(.()) {
(.);
.();
.((, , ));
}
( .()) {
(.);
.();
.((, , ));
}
( .()) {
();
{
.(.(,
..()));
}
( ) {
(
, );
}
.();
.((, , ));
}
(.()) {
(.);
.();
.((, , ));
}
(.()) {
(.);
.();
.((, , ));
}
;
}