Eu gostaria de entender bem a definição do papel de cada classe de configuração do Spring. O curso usa: - um arquivo chamado AppWebConfiguration, anotado com @EnableWebMvc e @ComponentScan - um arquivo chamado ServletSpringMVC, com extends AbstractAnnotationConfigDispatcherServletInitializer.
Pelo que entendi do papel de cada arquivo: - AppWebConfiguration: iria habilitar o uso do Spring no projeto e iria abrigar os métodos @Bean que fossem necessários para os serviços que eu desejar usar do Spring. - ServletSpringMVC: iria apontar os outros arquivos de configuração do sistema e indicar quando cada um deve ser inicializado.
Esse meu entendimento está correto? Como o Spring sabe onde procurar os @Bean dos serviços que desejo usar? É por causa da anotação @EnableWebMvc ou que? Eu poderia criar vários arquivos de configuração diferentes e colocar parte dos métodos @Bean em cada um e anotar todos esses arquivos com @EnableWebMvc?
A questão é que o curso sempre diz "Coloque tal método na classe AppWebConfiguration" e coisas do tipo, se referindo ao nome que inventaram para as classes no curso, mas não é dito o porquê de colocar determinado método em determinado lugar. Por exemplo: "deveríamos colocar tal método na classe anotada com tal coisa", ou "tal método na classe que dá extends naquilo", para que eu possa entender bem o porquê.