Porque, com Spring, você também usa tecnologias que estão dentro do Java
EE
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
O Spring Framework
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
regra de negócio e menos na infraestrutura
O Spring
MVC
é um framework para criação de aplicações web e serviços RESTful
é o framework que te ajuda no desenvolvimento de aplicações web robustas, flexíveis e com uma
clara separação de responsabilidades nos papéis do tratamento da requisição
é acrônimo de Model, View e
Controller
o Controller tratando a requisição. Ele é o primeiro componente que nós vamos programar para
receber os dados enviados pelo usuário
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
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
View
A View irá “desenhar”, renderizar e 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
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
Suporte para JDBC, JPA
grave ou consulte algum banco de dados.
Injeção de dependencias (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
programar voltados para interfaces
@Autowired
A anotação @Autowired avisa ao Spring Framework para injetar uma instância de alguma
implementação da interface RepositorioCliente na propriedade repositorio
funcionalidade
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, PostgreSQL, 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 • Spring Data for Apache Solr
Spring Data JPA
O suporte do Spring Framework para JPA já é muito bom, mas o projeto Spring Data JPA vai bem
além. Ele ajuda os desenvolvedores padronizando o uso de algumas funcionalidades, e isso faz com
que tenhamos menos esforço para implementar as mesmas coisas
Um exemplo disso seria a implementação padrão que ele já nos dá em repositórios, incluindo
métodos como save, delete, findOne, entre outros.
O Spring Security
esse projeto trata da segurança em nível de aplicação. Ele tem um suporte excelente para autenticação e
autorização
Spring Security torna bem simples a parte de autenticação. Com algumas poucas configurações, já
podemos ter uma autenticação via banco de dados, LDAP ou mesmo por memória. Sem falar nas várias
integrações que ele suporta e na possibilidade de criar as suas próprias.
Quanto a autorização, ele é bem flexível também. Através das permissões que atribuímos aos usuários
autenticados, podemos proteger as requisições web (como as telas do nosso sistema, por exemplo), a
simples invocação de um método e até a instância de um objeto.
Sem contar que, por tabela, nós já protegemos as nossas aplicações de diversos ataques como o Session
Fixation e o Cross Site Request Forgery
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.
A configuração via código Java trouxe benefícios, como evitar erros de digitação, porque a classe de
configuração precisa ser compilada. Mas nós precisamos escrever muito código explicitamente
Com toda essa configuração excessiva, o desenvolvedor perde o foco na coisa mais importante: desenvolver as
regras de negócio da aplicação. 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 dependências que agrupam outras dependências, 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
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. <tr th:each="convidado : ${convidados}"> <td
th:text="${convidado.nome}"></td> <td th:text="${convidado.quantidadeAcompanhantes}"></td> </tr> 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.
Maven
O Maven é uma ferramenta muito importante no dia a dia do desenvolvedor Java, porque com ele nós
conseguimos automatizar uma série de tarefas. Mas talvez o que mais fez o Maven ter sucesso, foi o
gerenciamento de dependências. É muito bom poder escrever algumas linhas e já ter a biblioteca
disponível para o nosso projeto.
O Spring Tool Suite - STS
O Spring Tool Suite, ou STS, é um Eclipse com vários plugins úteis para o trabalho
com o Spring.