Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

algaworks - livro - spring - boot - v2 0, Manuais, Projetos, Pesquisas de Análise de Sistemas de Engenharia

Spring boot

Tipologia: Manuais, Projetos, Pesquisas

2017

Compartilhado em 29/08/2017

sandro-rodrigues-45
sandro-rodrigues-45 🇧🇷

2 documentos

1 / 64

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40

Pré-visualização parcial do texto

Baixe algaworks - livro - spring - boot - v2 0 e outras Manuais, Projetos, Pesquisas em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

Sobre os autores

Normandes José Moreira Junior

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

Alexandre Afonso

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

Onde encontrar o código-fonte do projeto?

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.

Ajude na continuidade desse trabalho

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!

  • Introdução O Spring
  • Spring vs Java EE
  • O Spring Framework
  • Injeção de dependências com Spring
  • O Spring MVC
  • O Spring Data JPA
  • O Spring Security
  • O Spring Boot
  • O Thymeleaf
  • O Maven
  • O Spring Tool Suite - STS
  • Funcionamento O projeto de gestão de convidados
  • Criando o projeto no STS
  • Criando o controller
  • Criando a página
  • Rodando o projeto pela primeira vez
  • Repositório de convidados
    • Enviando um objeto do Controller para a View
    • Listando objetos com o Thymeleaf
    • Adicionando um convidado
    • Escolhendo o banco de dados
    • Deixando a aplicação segura
    • Introdução Publicando a aplicação
    • Usando o Postgres
    • Alteração de estratégia para chave primária
    • Criando o arquivo de inicialização
    • Instalando o Git
    • Configurando a aplicação no Heroku
    • Enviando a aplicação
    • Próximos passos Conclusão

Capítulo 1

Introdução

À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
  • Suporte para JDBC, JPA
  • Injeção de dependencias (Dependency injection – DI)

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

  1. Acessamos uma URL no browser que envia a requisição HTTP para o servidor que roda a aplicação web com Spring MVC. Esse servidor pode ser o Apache Tomcat, por exemplo. Perceba que quem recebe a requisição é o controlador do framework, o Spring MVC.
  2. O controlador do framework, irá procurar qual classe é responsável por tratar essa requisição, entregando a ela os dados enviados pelo browser. Essa classe faz o papel do controller.
  3. O controller passa os dados para o model , que por sua vez executa todas as regras de negócio, como cálculos, validações e acesso ao banco de dados.
  4. O resultado das operações realizadas pelo model é retornado ao controller.
  5. O controller retorna o nome da view , junto com os dados que ela precisa para renderizar a página.
  6. O “Framework” encontra a view que processa os dados, transformando o resultado em um HTML.
  7. Finalmente, o HTML é retornado ao browser do usuário.

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:

  • Spring Data Commons
  • Spring Data JPA
  • Spring Data Gemfire
  • Spring Data KeyValue
  • Spring Data LDAP
  • Spring Data MongoDB
  • Spring Data REST
  • Spring Data Redis
  • Spring Data for Apache Cassandra

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