2. Apresentação
● Cursando MBA em Liderança, Inovação e Gestão 3.0
PUC-RS
● Especialista em Ciência da Computação pela UFSC;
● Graduado em Tecnologia em Informática pela Unoesc;
● Atuação
○ Sócio Camtwo Sistemas;
○ CEO Clínica nas nuvens;
○ Desenvolvedor Java desde 2002;
○ Professor;
● Contato
○ andreforchesatto@gmail.com
○ github.com/forchesatto
○ slideshare.net/andreforchesatto
3. Ementário
Evolução do desenvolvimento de aplicações WEB. Introdução
ao Desenvolvimento RAD para WEB. Visão geral das
ferramentas e frameworks para desenvolvimento de aplicações
WEB. Gerenciamento de dependências e deploy com maven.
Injeção de dependência com Spring ou CDI. Padrão de
Desenvolvimento WEB Action Based e Component Based.
4. Planejamento
● Aula 01
○ Maven
○ Injeção de dependência
○ Introdução ao Spring
○ Spring IoC
○ Introdução Spring Boot
○ Introdução Spring Data
○ Spring Test
● Aula 02
○ Spring MVC
○ Spring Rest
○ Spring Data
○ Spring Web com Thymeleaf
5. Planejamento
● Aula 03
○ Spring Web thymeleaf
● Aula 04
○ Spring Security
● Aula 05
○ Spring cloud
○ Trabalho Final
10. Conceito
● Ferramenta para gerenciamento, construção e
implantação de projetos;
● Simplifica o processo de Build
● Organiza e compartilha as Libs dos projetos
● Fornece orientação para as melhores práticas
de projeto e programação
● Gera relatórios e documentação sobre o
projeto
11. Características
● Builds automatizados
● Ciclo de vida bem definido (lifecycle)
● Repositório de artefatos
● Gestão de Dependências
● Definição de Projetos declarativa (POM)
● Plugins como peça fundamental
● Quickstart rápido de projetos
● Site de projetos facilmente acessível
● Integração com controle de versão
12. Project Object Model (POM)
● Definições do projeto
● Configurações de dependências de
componentes(lib)
● Customizações (definições de plugin,
repositorios, etc..)
● Herança e agregação de projetos
14. Propriedades (POM)
● groupId (nome do package - empresa)
● artifactId (identificador do projeto)
● packaging (pom, war, jar, etc. - default jar)
● version (versão de release ou SNAPSHOT)
18. Herança de projetos
● Permite herdar as caracteristicas de um
projeto pai, como libs, propriedades e build.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
19. Tag Build
Tag do pom.xml onde definimos parâmetros de
compilação, como versão do Java, diretórios
de resources e vários outros plug-ins que
podem ser utilizados
21. Instalação
● Devemos ter uma instalação quando
desejamos rodar os comandos pelo prompt.
● Linux
○ sudo apt-get install maven2
● Windows
○ Efetuar o download
(http://maven.apache.org/download.html)
○ Descompactar em uma pasta
○ Criar uma variável de ambiente M2_HOME com o
caminho da pasta
○ Adicionar no classpath esta variável com o bin
22. Testando
● Testar no console mvn -v
● Criar um projeto simples no console:
mvn archetype:create
-DgroupId=br.com.camtwo
-DartifactId=exemplo
● Verificar se criou a estrutura de diretórios
● Verificar se criou a pasta .m2
29. O que é?
● Surgiu em 2003
● Framework open-source criado por Rod
Johnson
● Container leve com inversão de controle e
programação orientada a aspecto
● Criado para simplificar o desenvolvimento
enterprise
● É um projeto guarda-chuva para vários outros
30. Filosofia do framework
● Fornecer escolha em todos os níveis
● Acomodar diversas perspectivas.
● Manter forte compatibilidade com versões
anteriores
● Preocupe-se com o design da API.
● Defina altos padrões de qualidade de código.
31. Todos os componentes do sistema
são gerenciados pelo Spring
utilizando IoC e Injeção de
dependência.
32. "A primeira pergunta a ser respondida é:
como obter um objeto sem depender
direta ou indiretamente de sua classe?"
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
35. IOC (Inversão de controle)
● Delegação de tarefas de construção para
frameworks
● O objeto perde o controle sobre sua
construção
● Possibilita menor acoplamento entre as
dependências
36. Injeção de dependência
● Design pattern que visa desacoplar os
componentes da aplicação;
● Injeta através de construtor, setters ou
atributos o valor de dependência para a
classe a ser construída;
39. Spring e IoC
● Tudo passa pelo Container de Beans
● É o núcleo do Spring famework
● Usa IOC para gerenciar os componentes que
compõem uma aplicação
● Componentes são expressos como simples
Java Beans
● O Container gerencia as relações entre os
Beans e é responsável por sua configuração
● O Container gerencia o ciclo de vida dos
Beans
40. Tipos de Container
● Bean Factory
○ Dá suporte básico a injeção de dependência
○ Configuração e gerenciamento do ciclo de vida
● Application Context
○ Construído sobre o Bean Factory adicionando
serviços de:
■ Resolução “mensagens” através de arquivos de
propriedades para internacionalização
■ Carregamento de recursos genéricos
■ Publicação de eventos
41. Exemplo Bean Factory
@Service(value="mensagemBean")
public class MensagemImpl implements Mensagem {
private String mensagem = “Olá”;
public void setMensagem(String mensagem){
this.mensagem = mensagem;
}
public String getMensagem() {
return mensagem;
}
}
public interface Mensagem {
String getMensagem();
}
42. Características dos managed
beans
● Singletons por default
● Propriedades setadas por Dependency
Injection
○ Referência para outros managed beans
○ Strings
○ Tipos primitivos
○ Coleções (lists, sets, map, props)
● Parâmetros podem ser extraídos para
arquivos de propriedades
43. Tipos de anotações
● @Component - Componente genérico da
aplicação
● @Service – Anotação camada de serviço
● @Repository – Anotação para DAO
● @Controller – Anotação para camada web
● @Autowired – Injeção de dependência
● @Qualifier – Qualificar o nome do bean a ser
injetado
44. Spring - Boot
● Novo projeto da Pivot para simplificar o
inicio do desenvolvimento de aplicações
Spring.
● Elimina todos os xmls e configurações
básicas para uma aplicação Spring.
● Ganhou fama com o post no twitter:
https://twitter.com/rob_winch/status/3648716
58483351552
45. Spring - Boot
● Desenvolvido em Grovy
● Já configura todas as libs necessárias
● Não é um novo framework e um bootstrap
para Spring
● Configuração básica pronta
● Disponibiliza servidor tomcat ou jetty
embutido
46. Spring - Boot - Java
1. Criar um novo projeto Maven
2. Configurar pom.xml
3. Criar classe main
4. Criar classes de negócio da aplicação
50. Spring-boot Serviço Web
Ao rodar o tomcat/jetty embutido é iniciado e basta acessar http://localhost:8080/
que a app web esta disponível com base nos controladores criados
57. Spring Data
“Simplifica o desenvolvimento de aplicações
que usam novas tecnologias de acesso a
dados como: noSql, mapReduce e cloud.
Além do suporte aperfeiçoado a bancos
relacionais.”
67. Spring Data - @Query
Para aplicações que utilizam JPA, ainda é
possível criar as query utilizando JPAQL
68. Spring Data - Paginação
Utilizando as classes Page e Pageable do
Spring é possível fazer paginação na query
com o minimo de esforço.
Utilizando o método:
71. Transações Spring
● Suporte para gerenciamento programático e
declarativo de transações
● Transações locais são delegadas pelo Spring para o
gerente de transações do data-source
● Quando múltiplos recursos estão envolvidos
(transações distribuídas), Spring delega para o
gerente de transações JTA obtido através do JNDI
● Apenas algumas pequenas mudanças são
necessárias para trocar entre local e JTA
72. Transações Spring
● Gerenciamento Declarativo (+)
○ Usa AOP para encapsular chamadas a objetos
transacionais com código de begin e commit de
transações
● Comportamento de propagação
○ Mandatory, Never, Not Supported, Required, Requires New, Support,
Nested
● Também suporta níveis de isolação
○ Default, Read Uncommitted, Read Committed, Repeatable Read,
Serializable
73. Modelo transacional
● Normalmente o modelo flat transactions
● Se método é chamado dentro de uma transação, ele
pode continuar transação anterior
● Se ele falhar, transação inteira é revertida
● Se nova transação for iniciada no método que já faz
parte de uma transação, ela é independente
● Se falhar, pode sinalizar rollback() para desfazer
transação externa (ou não, e permitir que transação
externa continue)
● O possível rollback da transação externa não afetará
outras transações (T2) cujos resultados já foram
cometidos
74. Modelo transacional
T1 Suspensa T1
T2
Suspensa T1
T3
Início
A=0
B=0
C=0
A=5
sucesso
A=5
B=3
falha
C=8 C=0
Fim
A=5
B=0
C=0
B=0
75. Comportamento de propagação
● Mandatory
○ Indica que o método só pode ser chamado no
escopo de uma transação do cliente
○ Se o método for chamado fora de uma
transação, ele causará uma exceção
● Never
○ Indica que o método nunca pode estar dentro
de uma transação
○ Se o cliente que chama o método for parte de
uma transação, ele causará uma exceção
76. Comportamento de propagação
● NotSupported
○ Indica que o método não suporta transações
○ Se o método for chamado pelo cliente no escopo de uma
transação, a mesma será suspensa enquanto durar a
chamada do método (não haverá propagação de
transações do cliente)
● Required
○ Indica que o escopo de uma transação é requerido pelo
método
○ Se não existe transação, uma nova é criada e dura até
que o método termine (é propagada para todos os
métodos chamados)
○ Se já existe uma transação iniciada pelo cliente, o bean é
incluído no seu escopo durante a chamada do método
77. Comportamento de propagação
● Requires New
○ Indica que o método requer uma nova transação
○ Estando ou não o cliente no escopo de uma transação, o
bean irá iniciar uma nova transação que iniciará e
terminará no bean.
● Support
○ Indica que o método suporta transações
○ Será incluído no escopo da transação do cliente se existir
○ Se ele for chamado fora do escopo de uma transação ele
realizará suas tarefa sem transações e pode chamar
objetos que não suportam transações
78. E como fazer?
● Anotando as transações
○ A anotação pode ser no começo da classe ou
acima de um método
79. E como fazer?
● @Transactional
○ Indica que a classe ou o método esta envolvido em
uma transação
○ Se estiver sobre a classe indica que todos os
métodos terão o mesmo comportamento
transacional;
○ Os métodos anotados com @Transactional
desconsideram a anotação da classe
● ReadOnly
○ Indica que o método ou classe poderá ou não
alterar os dados contidos na transação
80. E como fazer?
● Propagation
● Indica o tipo de propagação da transação
○ PROPAGATION_MANDATORY
○ PROPAGATION_NESTED
○ PROPAGATION_NEVER
○ PROPAGATION_NOT_SUPPORTED
○ PROPAGATION_REQUERED
○ PROPAGATION_REQUERED_NEW
○ PROPAGATION_SUPPORTS