Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Funcionalides AppWebConfiguration e ServletSpringMVC

Olá,

Não ficou claro para mim para que cada uma dessas classes realmente serve.

Gostaria de uma explicação um pouco mais detalhada sobre as diferenças de uma para outra e para que realmente cada uma serve.

Eu fiz uma entrevista recentemente e não consegui explicar isso para o entrevistador.

Alguém poderia me explicar ?

Obrigado.

2 respostas
solução!

Olá, Leandro.

Antigamente, o Spring tinha um monte de XML para configurar a aplicação.

ServletSpringMVC

Essa classe serve pra "habilitar" o Spring MVC numa aplicação Java Web rodando dentro de um Servlet Container como o Tomcat.

Essa classe usa o mecanismo de ServletContainerInitializer da Servlet 3.0 pra frente, que permite que o Servlet Container descubra a classe que implementa essa interface.

A classe ServletSpringMVC é filha da classe abstrata AbstractAnnotationConfigDispatcherServletInitializer, que implementa a interface WebApplicationInitializer que é usada por SpringServletContainerInitializer que implemeta aquela interface ServletContainerInitializer. Não é lá algo muito direto!

Essa classe ServletSpringMVC evita essas linha no WEB-INF\web.xml:

<servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>
     org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/spring/spring-context.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
   <servlet-name>dispatcher</servlet-name>
   <url-pattern>/</url-pattern>
 </servlet-mapping>

AppWebConfiguration

Essa classe é responsável por configurar o Spring MVC em si com @EnableWebMvc . Já @ComponentScan diz onde estão os controllers.

É a mesma ideia, de evitar XML. Dessa vez, é o WEB-INF/spring-servlet.xml ou, conforme configurado no XML anterior, /WEB-INF/spring/spring-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="br.com.caelum.tarefas" />

 <mvc:annotation-driven />
</beans>

Ótima explicação.

Muito obrigado Alexandre Aquiles.

Duvidas mais do que esclarecidas.