Pular para o conteúdo principal

Quiz: Primeiros Passos com Spring Boot

Teste seus conhecimentos sobre a criação e estrutura de um projeto Spring Boot.

30 questões - Clique em cada pergunta para revelar a resposta.


Questões 1-10: Spring Initializr e Estrutura​

Pergunta 1: O que é o Spring Initializr?

Resposta: Spring Initializr é uma ferramenta web (start.spring.io) que gera a estrutura básica de um projeto Spring Boot:

  • Escolha do tipo de projeto (Maven/Gradle)
  • Versão do Java e Spring Boot
  • Dependências iniciais
  • Metadados do projeto (groupId, artifactId)

Pergunta 2: Qual é a estrutura padrão de um projeto Spring Boot?

Resposta:

src/
├── main/
│ ├── java/
│ │ └── com/example/demo/
│ │ └── DemoApplication.java
│ └── resources/
│ ├── application.properties
│ ├── static/
│ └── templates/
└── test/
└── java/
pom.xml

Pergunta 3: Para que serve o arquivo pom.xml?

Resposta: O arquivo pom.xml (Project Object Model) define:

  • Metadados do projeto (groupId, artifactId, version)
  • Dependências
  • Plugins Maven
  • Configuração de build
  • Parent Spring Boot (spring-boot-starter-parent)

Pergunta 4: O que é o spring-boot-starter-parent?

Resposta: Um parent Maven que fornece:

  • Gerenciamento de versões de dependências
  • Configuração padrão de plugins
  • Codificação UTF-8
  • Versão do Java configurada
  • Perfis de build
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>

Pergunta 5: O que é um starter do Spring Boot?

Resposta: Um starter é um conjunto de dependências pré-configuradas para um uso específico:

StarterUso
spring-boot-starter-webAPI REST
spring-boot-starter-data-jpaBanco de dados
spring-boot-starter-securitySegurança
spring-boot-starter-testTestes

Pergunta 6: Onde colocar o arquivo application.properties?

Resposta: Em src/main/resources/application.properties ou application.yml.

Este arquivo contém a configuração da aplicação (porta, banco de dados, etc.).


Pergunta 7: Qual a diferença entre application.properties e application.yml?

Resposta:

# application.properties
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/db
# application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost/db

YAML é mais legível para configurações hierárquicas.


Pergunta 8: Para que serve a pasta static/?

Resposta: A pasta src/main/resources/static/ contém arquivos estáticos servidos diretamente:

  • CSS
  • JavaScript
  • Imagens
  • Arquivos HTML estáticos

Acessível via http://localhost:8080/arquivo.css


Pergunta 9: Para que serve a pasta templates/?

Resposta: A pasta src/main/resources/templates/ contém os templates do lado do servidor:

  • Thymeleaf (.html)
  • FreeMarker (.ftl)
  • Mustache (.mustache)

Usado para aplicações web com renderização no servidor.


Pergunta 10: Como executar uma aplicação Spring Boot?

Resposta:

# Com Maven
mvn spring-boot:run

# Ou compilando o JAR
mvn clean package
java -jar target/app.jar

# Pela IDE
# Execute a classe main

Questões 11-20: Classe Principal e Anotações​

Pergunta 11: O que contém a classe principal?

Resposta:

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

É o ponto de entrada que inicia o contexto Spring.


Pergunta 12: O que faz a @SpringBootApplication?

Resposta: @SpringBootApplication combina três anotações:

  • @Configuration: classe de configuração
  • @EnableAutoConfiguration: auto-configuração do Spring Boot
  • @ComponentScan: varredura de componentes

Pergunta 13: O que é auto-configuração?

Resposta: O Spring Boot configura automaticamente os beans de acordo com:

  • As dependências presentes
  • As propriedades definidas
  • Os beans existentes

Exemplo: adicionar spring-boot-starter-data-jpa configura automaticamente um DataSource.


Pergunta 14: O que é @RestController?

Resposta: Anotação que combina:

  • @Controller: componente web
  • @ResponseBody: retorna JSON/XML
@RestController
public class UserController {

@GetMapping("/users")
public List<User> getAll() {
return userService.findAll();
}
}

Pergunta 15: Quais são as anotações de mapeamento HTTP?

Resposta:

AnotaçãoMétodo HTTP
@GetMappingGET
@PostMappingPOST
@PutMappingPUT
@DeleteMappingDELETE
@PatchMappingPATCH
@RequestMappingTodas (configurável)

Pergunta 16: Como recuperar um parâmetro da URL?

Resposta:

// Path variable: /users/123
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}

// Query param: /users?name=John
@GetMapping("/users")
public List<User> search(@RequestParam String name) {
return userService.findByName(name);
}

Pergunta 17: Como recuperar o corpo de uma requisição?

Resposta:

@PostMapping("/users")
public User create(@RequestBody UserRequest request) {
return userService.create(request);
}

@RequestBody desserializa o JSON em um objeto Java.


Pergunta 18: Para que servem @Component, @Service, @Repository?

Resposta: São estereótipos do Spring que marcam as classes como beans:

AnotaçãoUso
@ComponentBean genérico
@ServiceLógica de negócio
@RepositoryAcesso a dados
@ControllerCamada web

Todos são variantes de @Component.


Pergunta 19: O que são @Configuration e @Bean?

Resposta:

@Configuration
public class AppConfig {

@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
  • @Configuration: classe de configuração
  • @Bean: método que produz um bean

Pergunta 20: Como injetar uma dependência?

Resposta:

@Service
public class UserService {

private final UserRepository userRepository;

// Injeção por construtor (recomendado)
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}

Questões 21-30: Configuração e Repositórios​

Pergunta 21: Como definir a porta do servidor?

Resposta:

# application.properties
server.port=9090
# application.yml
server:
port: 9090

Padrão: 8080


Pergunta 22: Como usar perfis?

Resposta:

# application.yml (comum)
spring:
profiles:
active: dev

# application-dev.yml
server:
port: 8080

# application-prod.yml
server:
port: 80

Ativação: --spring.profiles.active=prod


Pergunta 23: Como ler uma propriedade de configuração?

Resposta:

@Value("${app.name}")
private String appName;

@Value("${app.timeout:5000}") // Valor padrão
private int timeout;

Pergunta 24: O que é JpaRepository?

Resposta: Interface do Spring Data JPA que fornece métodos CRUD:

public interface UserRepository extends JpaRepository<User, Long> {
// Métodos herdados: save, findById, findAll, delete, count...
}

Pergunta 25: Como criar uma entidade JPA?

Resposta:

@Entity
@Table(name = "users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String name;

private String email;

// Getters, setters
}

Pergunta 26: Como configurar o H2 em memória?

Resposta:

spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
h2:
console:
enabled: true # Console: /h2-console

Perfeito para desenvolvimento e testes.


Pergunta 27: Como o Spring Data gera as queries?

Resposta: Pelo nome do método:

List<User> findByName(String name);
// SELECT * FROM users WHERE name = ?

List<User> findByEmailContaining(String email);
// SELECT * FROM users WHERE email LIKE '%?%'

List<User> findByAgeGreaterThanOrderByNameAsc(int age);
// SELECT * FROM users WHERE age > ? ORDER BY name ASC

Pergunta 28: Como iniciar a aplicação com dados?

Resposta:

@Component
public class DataInitializer implements CommandLineRunner {

private final UserRepository repository;

@Override
public void run(String... args) {
repository.save(new User("Admin", "admin@example.com"));
}
}

Ou com src/main/resources/data.sql.


Pergunta 29: Como ver as queries SQL executadas?

Resposta:

spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true

logging:
level:
org.hibernate.SQL: DEBUG
org.hibernate.orm.jdbc.bind: TRACE

Pergunta 30: Como criar um JAR executável?

Resposta:

mvn clean package

# Resultado: target/app-0.0.1-SNAPSHOT.jar

java -jar target/app-0.0.1-SNAPSHOT.jar

O JAR contém a aplicação e um servidor Tomcat embarcado.


Pontuação​

PontuaçãoNível
27-30Excelente - Fundamentos dominados
21-26Bom - Algumas revisões
15-20Médio - Releia os capítulos
Menos de 15Precisa revisar

Voltar ao Módulo 2