Do Spring Framework 4 para o 5
Spring Framework 4 – WebMvcConfigurerAdapter
Olá, neste post vou dar uma dica rápida sobre uma pequena mudança que ocorreu na versão 5 do Spring Framework em relação as versões anteriores. A dica em questão é sobre a configuração programática da classe referente ao uso do Spring MVC. Antes da versão 5 ser lançada, estendiamos a classe abstrada WebMvcConfigurerAdapter
em nossa configuração, como mostra o exemplo a seguir:
@Configuration
@EnableWebMvc
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
// beans
}
Porém, a classe WebMvcConfigurerAdapter
foi marcada com @Deprecated
no Spring 5. E em alguns cursos que já desenvolvi utilizando o Spring 4, alguns alunos ansiosos por mudar a versão para o Spring 5 se deperam com essa questão e ficam sem saber como agir.
Spring Framework 5 – WebMvcConfigurer
Então, lendo a própria documentação da classe WebMvcConfigurerAdapter
é possível encontrar a solução. Nessa documentação temos a seguinte instrução:
/**
* An implementation of {@link WebMvcConfigurer} with empty methods allowing
* subclasses to override only the methods they’re interested in.
*
* @author Rossen Stoyanchev
* @since 3.1
* @deprecated as of 5.0 {@link WebMvcConfigurer} has default methods (made
* possible by a Java 8 baseline) and can be implemented directly without the
* need for this adapter
*/
Veja que na parte referente a @deprecated temos um link para WebMvcConfigurer o qual vai nos direcionar para a interface de mesmo nome. Essa interface substitui a classe abstrata WebMvcConfigurerAdapter. Sendo assim, a declaração da classe de configuração do Spring MVC na versão 5 seria como a descrita a seguir:
@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
// beans
}
E os métodos que antes eram sobrescritos a partir de WebMvcConfigurerAdapter
? Eles ainda podem ser sobrescritos, já que WebMvcConfigurerAdapter
possui a mesma lista de métodos que a interface WebMvcConfigurer
. Por sinal, WebMvcConfigurerAdapter
estende a interface WebMvcConfigurer
.
Mas se agora faremos uso da interface WebMvcConfigurer
, teremos então que implementar todos seus métodos? Não, se você analisar o código fonte da interface verá que todas as assinaturas de métodos lá contidas são do marcadas como default
. Um recurso incluído no Java 8 que faz com que métodos marcados com esta instrução não são obrigados a conter uma implementação em classes concretas que implementam a interface.
Bem, fica a dica caso você tenha resolvido alterar a versão do Spring 4 para a 5 em seus projetos e ficou perdido ao se deparar com essa situação.
Saiba mais sobre:
- Default Methods – https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
- Doc WebMvcConfigurer – https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html