@Bean方法存在继承
或 @Bean方法中存在调用子类方法
。
您可能想到从@EnableWebMVC注解入手,然后找到了DelegatingWebMvcConfiguration类,哪怕找到了这个类还是感觉有点难,是不是感觉有点绕。
假设是在Spring Boot环境中,那更加麻烦了,Boot多包装了一层自动装配又注册了不少相关的mvc的Bean。
如果是第一次看 MVC 原理,感觉有点蒙,正常,作者也蒙,太绕了,如果不知道核心类WebMvcConfigurationSupport 根本绕不出来。
@Bean实例化,@Bean实例化又会触发子类方法的执行,子类方法的执行又要用到@Bean组件,又要触发@Bean组件的实例化,形成一个环了,根本绕不出来,如何破局。
如果搞不定,请您先不要去直接分析Spring Boot,而是单独分析MVC。
之所以如此绕的关键在于在 @Bean方法中存在继承关系
,所以在今后遇到@Bean方法有继承时,一直往上找到“** 顶层类 **
”,查看顶层类的继承体系,就是核心类。
以 MVC 为例:
1、 当发现了存在@Bean方法的继承,找到顶层类即WebMvcConfigurationSupport;
2、分析WebMvcConfigurationSupport 的继承体系,找到DelegatingWebMvcConfiguration
3、现在破局了。
找到关键类WebMvcConfigurationSupport 后再看 MVC 原理,似乎简单不少。
Spring MVC源码分析:https://gitee.com/firefish985/article-list/tree/master/Spring/Spring Web MVC