terça-feira, 31 de janeiro de 2017

Spring MVC sem uso de XML


Fala galera!

Após um período de férias do blog (bem longo por sinal rsrsrs), convido vocês a acompanhar este post, que já faz um bom tempo que queria fazer. Mas agora com o tempo oportuno estou deixando com vocês. Bom, vamos lá!

Spring MVC sem uso de XML


Quando comecei a estudar programação utilizando a linguagem Java, fiquei muito empolgado, pois antes só havia programado utilizando as linguagens C e C++. Confesso que as facilidades que a linguagem proporcionava eram extremamente animadoras - e ainda são.

Porém, com o passar do tempo, percebi que existem alguns frameworks como o Spring, que exigem a configuração utilizando arquivos xml. Era até interessante no começo, mas de acordo que precisava iniciar projetos novos em alguns trabalhos freelancer, vi que estava ficando chato essas configurações.

Bem, com esses "problemas" em mãos resolvi fazer uma pesquisa e encontrei alguns sites que ensinam como organizar seu projeto utilizando o Spring sem o uso de xml. Então, vamos ao código.

Utilizarei o IDE Eclipse Luna com o Spring 4.3.5.

Vamos criar um novo projeto web e configurá-lo para o uso do Maven, onde adicionaremos as seguintes dependências:

        <properties>
  <!-- spring version -->
  <spring.version>4.3.5.RELEASE</spring.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
 </dependencies>

Agora, no pacote com.deviscoming.config, vamos criar a classe de configuração que será equivalente ao web.xml. Analise o código:


@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.deviscoming"})
public class AppConfig extends WebMvcConfigurerAdapter{
 
 @Bean
 public ViewResolver internalResourceViewResolver(){
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
  return viewResolver;
 }

}


@Configuration: esta annotation informa ao Spring que a nossa classe AppConfig será a classe de configuração do projeto;

@EnableWebMVC: aqui informamos ao Spring que vamos usar o Spring MVC;

@ComponentScan: para não precisarmos criar nossos beans, o Spring nos fornece esta annotation para fazer todo este trabalho para nós :). Na propriedade basePackges é informado qual pacote do projeto será escaneado pelo Spring. 

Lembram daquele trecho de código que existia no DispatcheServlet?


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/views/" />
 <property name="suffix" value=".jsp" />
</bean>

Pois bem, adicionaremos em nossa classe conforme abaixo:

@Bean public InternalResourceViewResolver internalResourceViewResolver(){
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
       return viewResolver;
}


A classe InternalResourceViewResolver mostra ao Spring onde estão nossas páginas, então instanciamos a classe e 'setamos' o prefixo e sefixo usando os métodos setPrefix() e setSuffix().

Beleza, já temos a primeira classe para executar nosso projeto. Vamos agora criar outra classe no mesmo pacote da AppConfig e nomearemos de WebAppInitializer. Confira abaixo:


public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

 @Override
 protected Class[] getRootConfigClasses() {
  return null;
 }

 @Override
 protected Class[] getServletConfigClasses() {
  return new Class[] {AppConfig.class};
 }

 @Override
 protected String[] getServletMappings() {
  return new String[]{"/"};
 }
 
}

Depois estendemos a classe AbstractAnnotationConfigDispatcherServletInitializer implementamos seus métodos. 

Preste atenção nos métodos getServletConfigClasses() e getServletMappings(). O primeiro você deve informar a classe de configuração, no nosso caso AppConfig.


Pronto! pode executar seu projeto que ele irá funcionar perfeitamente.

É isso aí pessoal, até mais!

;)
Renan Rodrigues Ramos Desenvolvedor

Sou desenvolvedor, amo desenvolvimento de software, músico e apaixonado por filmes e seriados.