Você está na página 1de 23

Spring Framework

Prof. Rodrigo Barbosa


prof2300@iesp.edu.br
(83)991330759
Spring
- O Spring é uma plataforma de desenvolvimento abrangente para aplicativos Java. Fornecem
as seguintes bibliotecas:
Spring Framework: O núcleo do Spring, que oferece recursos de injeção de dependência,
tratamento de eventos, programação orientada a aspectos, segurança e muito mais.
Spring Boot: Facilita a criação de aplicativos Spring prontos para produção, com configuração
automática, incorporação de servidores e facilidades de desenvolvimento.
Spring MVC: Framework para o desenvolvimento de aplicativos da web usando o padrão
Model-View-Controller.
Spring Data: Facilita o acesso a bancos de dados e a realização de operações CRUD.
Spring JPA (Java Persistence API): Facilita o desenvolvimento de aplicativos JPA para acesso
a bancos de dados relacionais.
Spring
Spring Security: Oferece recursos de segurança, como autenticação, autorização e
proteção contra ameaças.
Spring Cloud: Fornece ferramentas e bibliotecas para desenvolver aplicativos baseados
em microserviços.
Spring Batch: Oferece suporte para processamento em lote.
Spring Integration: Facilita a integração de sistemas e aplicativos.
Spring Web Services: Oferece suporte ao desenvolvimento de serviços da web
baseados em SOAP.
Spring HATEOAS: Ajuda a implementar os princípios do HATEOAS em aplicativos
RESTful.
Spring
- Ao trabalhar com o Spring, é importante aderir a algumas melhores práticas e
conceitos-chave:
Injeção de Dependência (DI): O Spring promove a injeção de dependência,
permitindo que as dependências sejam injetadas em vez de criadas manualmente.
Programação Orientada a Aspectos (AOP): O Spring permite a implementação
de funcionalidades transversais, como logging e tratamento de transações, usando
o AOP.
Configuração por Anotações: Use anotações, como @Component, @Service,
@Repository e @Controller, para configurar seus componentes Spring.
Spring
Tratamento de Exceções: Use a estrutura de tratamento de exceções do Spring para lidar
com exceções de maneira consistente em seu aplicativo.

Uso de Interface e Abstração: Evite acoplar seu código a implementações específicas


usando interfaces e abstração.

Testes Unitários e de Integração: O Spring oferece suporte para testes, incluindo testes
unitários e de integração. Use ferramentas como JUnit e Mockito.
Criando projetos com Spring

Spring Boot:
● Use o Spring Initializer para gerar um projeto Spring
Boot com as dependências necessárias.
● Defina as configurações do aplicativo em
application.properties ou application.yml.
● Crie classes anotadas com @RestController para expor
endpoints da API.
● Execute o aplicativo usando o main método.
Criando projetos com Spring
Spring MVC:
● Anote as classes de controle com @Controller.
● Use @RequestMapping para mapear URLs para métodos de controle.
● Configure os modelos e visões (normalmente HTML ou Thymeleaf).
● Configure o Dispatcher Servlet no arquivo de configuração.
Criando projetos com Spring

Spring Data e Spring JPA:


● Anote suas entidades com @Entity.
● Crie repositórios estendendo JpaRepository ou
CrudRepository.
● Configure a conexão com o banco de dados em
application.properties.
● Use os métodos do repositório para acessar o banco de
dados.
DTO - Data Transfer Object
- No Spring, um DTO é uma classe simples e leve usada para transferir dados
entre camadas da aplicação, como a camada de serviço e a camada de
controle, ou para transmitir dados entre o servidor e o cliente em aplicativos
da web.
- A principal finalidade de um DTO no contexto do Spring é fornecer uma
representação estruturada dos dados que deve ser transmitida entre
diferentes partes da aplicação.
Definições do DTO
1. Estrutura Simples: Um DTO é uma classe que contém atributos (geralmente campos públicos ou com métodos de acesso
getters e setters) para representar os dados que precisam ser transferidos. Esses atributos geralmente correspondem aos
dados de um modelo ou entidade.
2. Transferência de Dados: Os DTOs são usados para transferir dados entre camadas da aplicação. Isso pode incluir
transferência de dados entre o controlador e o serviço, entre o serviço e o repositório, ou entre o servidor e o cliente em
aplicativos da web.
3. Evita Exposição de Detalhes Internos: Os DTOs permitem que você evite expor detalhes internos de suas entidades ou
modelos, fornecendo uma camada de abstração. Isso ajuda a manter o encapsulamento e a reduzir o acoplamento entre
diferentes partes do código.
4. Aumenta a Eficiência da Comunicação: Os DTOs podem ser úteis em cenários onde você deseja reduzir a quantidade de
dados transmitidos entre as camadas da aplicação. Isso é particularmente relevante em aplicativos da web, onde a largura de
banda é um recurso limitado.
5. Personalização dos Dados: Em alguns casos, você pode criar DTOs personalizados que incluem apenas os campos
necessários para uma operação específica, o que pode melhorar o desempenho e a eficiência da comunicação.
- É comum usar DTOs em conjunto com as operações de mapeamento para
converter dados entre objetos de entidade (usados internamente) e objetos
de transferência de dados (usados para comunicação externa);
- EX: Biblioteca ModelMapper, frequentemente usada para simplificar a
conversão de dados entre objetos de domínio e DTOs.
DTO no Spring
- O Spring não impõe uma abordagem específica para o uso de DTOs, mas
fornece flexibilidade para os desenvolvedores escolherem como e quando
usar DTOs em seus aplicativos;
- O uso de DTOs no Spring é uma prática comum para transferir dados entre
camadas da aplicação ou para se comunicar com clientes;
DTO no Spring
Comunicação entre Camadas da Aplicação:

● O Spring permite que você defina objetos DTO para representar os dados que precisa transferir entre diferentes camadas da
aplicação, como a camada de controle e a camada de serviço, ou entre a camada de serviço e a camada de acesso a dados
(repositórios).

Operações de Mapeamento:

● Em muitos casos, você precisa realizar operações de mapeamento para converter dados entre objetos de entidade (ou
modelos de domínio) e objetos DTO. O Spring oferece flexibilidade para realizar essas operações de mapeamento
manualmente ou usando bibliotecas como o ModelMapper ou o MapStruct.
DTO no Spring
Controller para View (Resposta HTTP):
○ Ao criar aplicativos da web usando Spring MVC, os controladores podem retornar objetos
DTO como parte da resposta HTTP. Esses objetos DTO são frequentemente serializados
em formatos como JSON ou XML para comunicação com o cliente (navegador).

@RestController

public class ExemploController {

@GetMapping("/exemplo")

public ExemploDTO obterExemplo() {

// Lógica para buscar e mapear os dados do modelo para um ExemploDTO

return new ExemploDTO();

}
DTO no Spring
Requisições do Cliente para o Controller:

○ Quando o cliente (navegador ou outro aplicativo) envia dados para o controlador Spring, esses dados são frequentemente mapeados
para objetos DTO antes de serem processados. Isso pode simplificar a validação e a manipulação dos dados da solicitação.

@RestController

public class ExemploController {

@PostMapping("/exemplo")

public ResponseEntity<Void> criarExemplo(@RequestBody ExemploDTO exemploDTO) {

// Processamento do ExemploDTO recebido da requisição

return ResponseEntity.status(HttpStatus.CREATED).build();

}
DTO no Spring
Redução de Sobrecarga na Comunicação:

○ DTOs também são úteis quando você deseja reduzir a sobrecarga na comunicação entre as camadas. Em vez de
transferir todos os detalhes dos objetos de entidade, você pode selecionar apenas os campos relevantes para um DTO
específico.

Customização de Respostas:

○ O uso de DTOs permite personalizar as respostas enviadas aos clientes. Você pode incluir ou excluir campos
específicos de acordo com as necessidades de cada endpoint.
Anotações no Spring
O Spring Framework fornece uma ampla variedade de anotações que são usadas para configurar e personalizar o comportamento de
componentes e classes em um aplicativo Spring. Abaixo, vou explicar algumas das anotações mais comuns e amplamente utilizadas
no Spring. Lembre-se de que a lista a seguir não é exaustiva, pois o Spring oferece muitas outras anotações especializadas para
cenários específicos.

@Component e Derivadas (@Controller, @Service, @Repository):

@Component é a anotação raiz para definir um componente gerenciado pelo Spring. Componentes anotados com @Controller,
@Service, ou @Repository são subtipos de @Component com semântica específica.

@Configuration:

Essa anotação é usada para marcar uma classe como uma classe de configuração. Classes de configuração definem beans
gerenciados pelo Spring e são frequentemente usadas em conjunto com @Bean.
Anotações no Spring
@Bean:

● Usado em métodos dentro de classes anotadas com @Configuration, @Bean define um método que cria e configura um bean
gerenciado pelo Spring.

@Autowired:

● Essa anotação é usada para injetar dependências automaticamente. Pode ser usada em campos, construtores e métodos.

@Qualifier:

● Usado em conjunto com @Autowired para especificar qual bean deve ser injetado quando existem várias implementações de
um mesmo tipo.
Anotações no Spring
@Value:

● Permite injetar valores diretamente em propriedades de beans a partir de um arquivo de propriedades ou do arquivo de
configuração do Spring.

@Scope:

● Define o escopo do bean, controlando quantas instâncias do bean são criadas e gerenciadas pelo Spring.

@PostConstruct e @PreDestroy:

● Essas anotações são usadas para marcar métodos de inicialização e destruição de um bean, permitindo que você execute
ações personalizadas nessas fases do ciclo de vida do bean.
Anotações no Spring
@RequestMapping e Anotações Relacionadas (para Spring MVC):

Essas anotações são usadas em métodos de controladores para mapear URLs para métodos de tratamento de requisições
HTTP. Isso inclui @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, etc.

@PathVariable:

● Usada para mapear variáveis na URL para parâmetros em métodos de controladores.


Anotações no Spring
@RequestParam:

● Usada para mapear parâmetros de consulta da URL para parâmetros em métodos de controladores.

@RequestBody:

● Usada para mapear o corpo de uma requisição HTTP para um parâmetro em um método de controlador.

@ResponseBody:

● Usada para marcar um método de controlador que retorna dados que devem ser serializados e enviados como resposta
HTTP.
Anotações no Spring
@Valid e @Validated:

● Usadas para ativar a validação de dados com base em anotações, como @NotNull, @Size, etc., em argumentos de métodos
em controladores.

@ExceptionHandler:

● Usada para tratar exceções específicas dentro de controladores, permitindo a personalização do tratamento de erros.
Anotações no Spring
@RestController:

● Essa anotação combina @Controller e @ResponseBody, indicando que a classe é um controlador que retorna dados
diretamente no corpo da resposta HTTP.

@Transactional:

● Usada para marcar métodos ou classes para configuração de transações. O Spring gerenciará automaticamente o início e o
commit de transações.

@CrossOrigin:

● Usada para configurar políticas de compartilhamento de recursos entre origens diferentes em aplicativos da web.

Você também pode gostar