
























































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Spring boot
Tipologia: Manuais, Projetos, Pesquisas
1 / 64
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Sócio e instrutor da AlgaWorks. Graduado em Engenharia Elétrica pela Universidade Federal de Uberlândia e detentor das certificações LPIC-1, SCJP e SCWCD. Palestrante da maior conferência de Java do mundo (JavaOne San Francisco), autor e co-autor de vários livros e instrutor de cursos de Java, JPA, TDD, Design Patterns, Spring Framework, etc.
LinkedIn: https://www.linkedin.com/in/normandesjr Twitter: @normandesjr
Instrutor Java na AlgaWorks, graduado em Sistemas de Informação, está no mercado de programação Java há mais de 8 anos, principalmente no desenvolvimento de sistemas corporativos.
LinkedIn: https://www.linkedin.com/in/alexandreafon Twitter: @alexandreafon
Neste livro, nós vamos desenvolver um pequeno projeto passo a passo. O link para baixar o código-fonte foi enviado para seu e-mail quando você se inscreveu para receber o livro.
Caso você tenha perdido esse link, acesse http://alga.works/livro-spring-boot/ para recebê-lo novamente.
Escrever um livro (mesmo que pequeno, como esse) dá muito trabalho, por isso, esse projeto só faz sentido se muitas pessoas tiverem acesso a ele.
Ajude a divulgar esse livro para seus amigos que também se interessam por programação Java. Compartilhe no Facebook e Twitter!
Capítulo 1
Às vezes a parte mais difícil para quem está começando uma nova aplicação Java web, mesmo se esse programador já conhece a linguagem, é justamente começar!
Você precisa criar a estrutura de diretórios para os vários arquivos, além de criar e configurar o build file com as dependências.
Se você já é programador Java para web, sempre que precisa criar um novo projeto, o que você faz? É possível que sua resposta seja: “eu crio um novo projeto e vou copiando as configurações de outro que já está funcionando”.
Se você é iniciante, seu primeiro passo será procurar algum tutorial que te ensine a criar o projeto do zero, e então copiar e colar todas as configurações no seu ambiente de desenvolvimento até ter o “hello world” funcionando.
Esses são cenários comuns no desenvolvimento web com Java quando estamos usando ferramentas como Eclipse e Maven simplesmente, mas existem alternativas a este “castigo inicial” da criação de um novo projeto, e esse é um dos objetivos desse livro, mostrar um caminho mais fácil e prazeroso para criar um projeto web em Java com Spring Framework.
Nós vamos criar uma aplicação simples com Spring Boot, Spring MVC, Spring Data JPA, Spring Security e Thymeleaf usando o Spring Tool Suite (STS), uma IDE baseada no Eclipse que vem com o Spring Initializr (não está escrito errado, é Initializr mesmo), uma ferramenta muito útil para criar nossos projetos com Spring.
www.algaworks.com 11
Mas existem programadores que preferem trabalhar com os projetos do Spring, e outros que preferem trabalhar com as especificações do Java EE, sem Spring.
Como o Spring é independente de especificação, novos projetos são lançados e testados muito mais rapidamente.
De fato, existem vários projetos que são lançados em beta para a comunidade, e caso exista uma aceitação geral, ele vai pra frente, com o apoio de uma grande massa de desenvolvedores.
2.3. O Spring Framework
É fácil confundir todo o ecossistema Spring com apenas o Spring Framework. Mas, o Spring Framework é apenas um, dentre o conjunto de projetos, que o Spring possui.
Ele é o projeto do Spring que serve de base para todos os outros, talvez por isso haja essa pequena confusão.
Ele foi pensado para que nossas aplicações pudessem focar mais na regra de negócio e menos na infraestrutura.
Dentre suas principais funcionalidades, podemos destacar:
O Spring MVC, que falaremos melhor mais para frente, é um framework para criação de aplicações web e serviços RESTful. Ele é bastante conveniente, pois, muitas das aplicações que construímos hoje em dia precisam atender requisições web.
Com o mesmo pensamento do Spring MVC, temos o suporte para JDBC e JPA. Isso porque persistência também é um recurso muito utilizado nas aplicações. É difícil conceber uma aplicação hoje que não grave ou consulte algum banco de dados.
www.algaworks.com 13
Por último, assim como o Spring Framework é a base do ecossistema, a injeção de dependências é a base do Spring Framework. Imagino que os projetos Spring seriam quase que uma bagunça caso esse conceito não tivesse sido implementado.
2.4. Injeção de dependências com Spring
Injeção de dependências (ou Dependency Injection – DI) é um tipo de inversão de controle (ou Inversion of Control – IoC) que dá nome ao processo de prover instâncias de classes que um objeto precisa para funcionar.
A grande vantagem desse conceito é que nós conseguimos programar voltados para interfaces e, com isso, manter o baixo acoplamento entre as classes de um mesmo projeto.
Com certeza, essa característica é uma grande vantagem para a arquitetura do seu sistema assim como é para o próprio Spring.
Como foi dito mais no início, essa pequena-grande funcionalidade é a base de todo o ecossistema Spring. É difícil pensar em Spring sem a injeção de dependências. Sendo assim, esse é um conceito que merece a atenção da sua parte.
Para entender um pouco de como é na prática, ao invés de você fazer isso:
public class ServicoCliente {
// Nesse exemplo estou supondo que "RepositorioCliente" é uma // interface. Mas poderia ser uma classe abstrata ou // mesmo uma classe concreta. private RepositorioCliente repositorio = new RepositorioClienteImpl ();
... }
Você vai fazer isso:
public class ServicoCliente {
www.algaworks.com 14
Pare um pouco e volte na figura acima, leia mais uma vez todos os passos desde a requisição do browser, até a página ser renderizada de volta a ele.
Como você deve ter notado, temos o Controller tratando a requisição, ele é o primeiro componente que nós vamos programar para receber os dados enviados pelo usuário.
www.algaworks.com 16
Mas é muito importante estar atento e não cometer erros adicionando regras de negócio, acessando banco de dados ou fazendo validações nessa camada, precisamos passar essa responsabilidade para o Model.
No Model , pensando em algo prático, é o local certo para usarmos o JPA/Hibernate para salvar ou consultar algo no banco de dados, é onde iremos calcular o valor do frete para entrega de um produto, por exemplo.
A View irá desenhar, renderizar, transformar em HTML esses dados para que o usuário consiga visualizar a informação, pois enquanto estávamos no Controller e no Model , estávamos programando em classes Java, e não em algo visual para o browser exibir ao usuário.
Essa é a ideia do MVC, separar claramente a responsabilidade de cada componente dentro de uma aplicação. Por quê? Para facilitar a manutenção do seu código, temos baixo acoplamento, e isso é uma boa prática de programação.
2.6. O Spring Data JPA
Spring Data JPA é um dos projetos do Spring Data.
O Spring Data é um projeto que tem o objetivo de simplificar o acesso a tecnologias de armazenamento de dados. Sejam elas relacionais (MySQL, Postgres, etc) ou não (MongoDB, Redis, etc).
O Spring Data já possui vários projetos dentro dele, como:
www.algaworks.com 17
2.8. O Spring Boot
Enquanto os componentes do Spring eram simples, sua configuração era extremamente complexa e cheia de XMLs. Depois de um tempo, a partir da versão 3.0, a configuração pôde ser feita através de código Java.
Mas mesmo com configuração via código Java, que trouxe benefícios, como evitar erros de digitação, pois a configuração agora precisa ser compilada, ainda assim precisávamos escrever muito código explicitamente.
Com toda essa configuração excessiva, o desenvolvedor perde o foco do mais importante: o desenvolvimento da aplicação, das regras de negócio e da entrega do software.
Talvez a maior revolução e o maior acerto dos projetos Spring, foi o Spring Boot. Com ele você alcança um novo paradigma para desenvolver aplicações Spring com pouco esforço.
O Spring Boot trouxe agilidade, e te possibilita focar nas funcionalidades da sua aplicação com o mínimo de configuração.
Vale destacar que, toda essa “mágica” que o Spring Boot traz para o desenvolvimento Spring, não é realizado com geração de código. Não, o Spring Boot não gera código! Ele simplesmente analisa o projeto e automaticamente o configura.
É claro que é possível customizar as configurações, mas o Spring Boot segue o padrão que a maioria das aplicações precisa, então, muitas vezes não é preciso fazer nada.
Se você já trabalha com o Maven, sabe que precisamos adicionar várias dependências no arquivo pom.xml , que pode ficar extenso, com centenas de linhas de configuração, mas com o Spring Boot podemos reduzir muito com os starters que ele fornece.
Os starters são apenas dependências que agrupam outras, assim, se você precisa trabalhar com JPA e Hibernate por exemplo, basta adicionar uma única entrada no pom.xml , que todas as dependências necessárias serão adicionadas ao classpath.
www.algaworks.com 19
2.9. O Thymeleaf
A view irá retornar apenas um HTML para o browser do cliente, mas isso deixa uma dúvida: Como ela recebe os objetos Java, enviados pelo controller , e os transforma em HTML?
Nessa hora que entra em ação o Thymeleaf!
Teremos um código HTML misturado com alguns atributos do Thymeleaf, que após processado, será gerado apenas o HTML para ser renderizado no browser do cliente.
O Thymeleaf não é um projeto Spring, mas uma biblioteca que foi criada para facilitar a criação da camada de view com uma forte integração com o Spring, e uma boa alternativa ao JSP.
O principal objetivo do Thymeleaf é prover uma forma elegante e bem formatada para criarmos nossas páginas. O dialeto do Thymeleaf é bem poderoso, como você verá no desenvolvimento da aplicação, mas você também pode estendê-lo para customizar de acordo com suas necessidades.
Para você ver como ele funciona, vamos analisar o código abaixo.
A expressão ${} interpreta variáveis locais ou disponibilizadas pelo controller.
O atributo th:each itera sobre a lista convidados, atribuindo cada objeto na variável local convidado. Isso faz com que vários elementos tr sejam renderizados na página.
Dentro de cada tr existem 2 elementos td. O texto que eles irão exibir vem do atributo th:text, junto com a expressão ${}, lendo as propriedades da variável local convidado.
www.algaworks.com 20