En esta sección, aprenderemos sobre la estructura típica de un proyecto Spring Boot. Comprender cómo se organiza un proyecto Spring Boot es crucial para desarrollar aplicaciones de manera eficiente y mantener el código limpio y manejable.
Estructura Básica del Proyecto
Cuando creas un nuevo proyecto Spring Boot, generalmente verás una estructura de directorios similar a la siguiente:
my-spring-boot-app/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── myapp/ │ │ │ ├── MySpringBootApplication.java │ │ │ ├── controller/ │ │ │ ├── service/ │ │ │ └── repository/ │ │ ├── resources/ │ │ ├── application.properties │ │ └── static/ │ │ └── templates/ │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │ │ └── MySpringBootApplicationTests.java ├── .gitignore ├── mvnw ├── mvnw.cmd ├── pom.xml └── README.md
Desglose de la Estructura
-
src/main/java: Contiene el código fuente de la aplicación.
- com/example/myapp: Paquete base de la aplicación.
- MySpringBootApplication.java: Clase principal que arranca la aplicación Spring Boot.
- controller: Contiene las clases de controladores que manejan las solicitudes HTTP.
- service: Contiene las clases de servicio que implementan la lógica de negocio.
- repository: Contiene las interfaces de repositorio que interactúan con la base de datos.
- com/example/myapp: Paquete base de la aplicación.
-
src/main/resources: Contiene los recursos de la aplicación.
- application.properties: Archivo de configuración principal de Spring Boot.
- static: Contiene recursos estáticos como HTML, CSS, JavaScript, imágenes, etc.
- templates: Contiene plantillas Thymeleaf u otros motores de plantillas.
-
src/test/java: Contiene las pruebas unitarias e integradas.
- MySpringBootApplicationTests.java: Clase de prueba principal.
-
.gitignore: Archivo que especifica qué archivos y directorios deben ser ignorados por Git.
-
mvnw y mvnw.cmd: Scripts para ejecutar Maven Wrapper, que permite construir el proyecto sin necesidad de tener Maven instalado globalmente.
-
pom.xml: Archivo de configuración de Maven que define las dependencias y configuraciones del proyecto.
-
README.md: Archivo de documentación del proyecto.
Explicación Detallada
Clase Principal
package com.example.myapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
- @SpringBootApplication: Esta anotación combina tres anotaciones importantes:
@Configuration
,@EnableAutoConfiguration
, y@ComponentScan
. Marca esta clase como la clase principal de configuración y arranque de la aplicación. - main: El método principal que utiliza
SpringApplication.run
para iniciar la aplicación.
Controladores
package com.example.myapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, World!"; } }
- @RestController: Marca la clase como un controlador donde cada método devuelve un objeto de dominio en lugar de una vista.
- @GetMapping: Mapea las solicitudes HTTP GET a métodos específicos.
Servicios
package com.example.myapp.service; import org.springframework.stereotype.Service; @Service public class HelloService { public String getGreeting() { return "Hello, World!"; } }
- @Service: Marca la clase como un servicio, que contiene la lógica de negocio.
Repositorios
package com.example.myapp.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.myapp.model.User; public interface UserRepository extends JpaRepository<User, Long> { }
- JpaRepository: Proporciona métodos CRUD y más para la entidad
User
.
application.properties
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret
- server.port: Configura el puerto del servidor.
- spring.datasource.url: Configura la URL de la base de datos.
- spring.datasource.username: Configura el nombre de usuario de la base de datos.
- spring.datasource.password: Configura la contraseña de la base de datos.
Ejercicio Práctico
Ejercicio 1: Crear un Proyecto Spring Boot
-
Crear un Proyecto: Usa Spring Initializr (https://start.spring.io/) para crear un nuevo proyecto Spring Boot con las siguientes dependencias:
- Spring Web
- Spring Data JPA
- H2 Database
-
Estructura del Proyecto: Asegúrate de que la estructura del proyecto se vea como la descrita anteriormente.
-
Clase Principal: Crea la clase principal
MySpringBootApplication
en el paquetecom.example.myapp
. -
Controlador: Crea un controlador
HelloController
en el paquetecom.example.myapp.controller
que maneje una solicitud GET en la ruta/hello
. -
Servicio: Crea un servicio
HelloService
en el paquetecom.example.myapp.service
que devuelva un saludo. -
Repositorio: Crea una interfaz
UserRepository
en el paquetecom.example.myapp.repository
que extiendaJpaRepository
.
Solución
// MySpringBootApplication.java package com.example.myapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
// HelloController.java package com.example.myapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, World!"; } }
// HelloService.java package com.example.myapp.service; import org.springframework.stereotype.Service; @Service public class HelloService { public String getGreeting() { return "Hello, World!"; } }
// UserRepository.java package com.example.myapp.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.myapp.model.User; public interface UserRepository extends JpaRepository<User, Long> { }
Conclusión
En esta sección, hemos explorado la estructura básica de un proyecto Spring Boot y hemos creado un proyecto simple con controladores, servicios y repositorios. Comprender esta estructura te ayudará a organizar tu código de manera eficiente y a seguir las mejores prácticas en el desarrollo de aplicaciones Spring Boot. En el próximo módulo, profundizaremos en las anotaciones de Spring Boot y cómo se utilizan para simplificar el desarrollo de aplicaciones.
Curso de Spring Boot
Módulo 1: Introducción a Spring Boot
- ¿Qué es Spring Boot?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Spring Boot
- Entendiendo la Estructura del Proyecto Spring Boot
Módulo 2: Conceptos Básicos de Spring Boot
- Anotaciones de Spring Boot
- Inyección de Dependencias en Spring Boot
- Configuración de Spring Boot
- Propiedades de Spring Boot
Módulo 3: Construyendo Servicios Web RESTful
- Introducción a los Servicios Web RESTful
- Creando Controladores REST
- Manejo de Métodos HTTP
- Manejo de Excepciones en REST
Módulo 4: Acceso a Datos con Spring Boot
- Introducción a Spring Data JPA
- Configuración de Fuentes de Datos
- Creación de Entidades JPA
- Uso de Repositorios de Spring Data
- Métodos de Consulta en Spring Data JPA
Módulo 5: Seguridad en Spring Boot
- Introducción a Spring Security
- Configuración de Spring Security
- Autenticación y Autorización de Usuarios
- Implementación de Autenticación JWT
Módulo 6: Pruebas en Spring Boot
- Introducción a las Pruebas
- Pruebas Unitarias con JUnit
- Pruebas de Integración
- Simulación con Mockito
Módulo 7: Funciones Avanzadas de Spring Boot
Módulo 8: Despliegue de Aplicaciones Spring Boot
Módulo 9: Rendimiento y Monitoreo
- Ajuste de Rendimiento
- Monitoreo con Spring Boot Actuator
- Uso de Prometheus y Grafana
- Gestión de Registros y Logs