Lecture: Building Web Applications in Java with Spring Boot 3
Introduction
Purpose of the Course
- Learn Spring's fundamentals by creating a REST API that communicates with a database and supported by comprehensive tests.
- By the end of the course, you'll have the knowledge to start building your own web applications with Spring Boot 3.
About the Instructor
- Dan Vega, Spring Developer Advocate at Broadcom, Java Champion, course creator, and speaker.
Instructor's Contact Information
Course Modules
Module 1: Introduction
- Who is Dan Vega?
- Course outcomes and prerequisites.
- Introduction to Spring framework.
Module 2: Creating the Project
- Initiate a project using the Spring Initializer at start.spring.io.
- Dive into understanding IDE setup, project structure in Maven.
- Explore Dev Tools and logging.
Module 3: Building a REST API
- Use Spring MVC to build the REST API.
- Implementation with in-memory data before switching to a database.
- Discuss key components — controllers, services, repositories.
- Code demonstration on creating and managing endpoints.
Module 4: Database Integration
- Replace in-memory data with a real database connection.
- Examples with H2 in-memory database and later switch to PostgreSQL using Docker Compose.
- Introduce Spring Data for efficient database interaction.
Module 5: REST Clients
- Discuss REST clients and their importance in microservices architecture.
- Explore the use of RestTemplate, WebClient, and Spring’s Rest Client in communicating with other services.
- Demonstrate HTTP interfaces for simplified client service interaction.
Module 6: Testing the Application
- Importance of testing in development lifecycle.
- Overview of tools provided by Spring Boot Starter Test (JUnit, AssertJ, Mockito, etc.).
- Write various types of tests: unit tests, integration tests, controller tests, and REST client tests.
Detailed Breakdown
Prerequisites for the Course
- Java Fundamentals: Basic to intermediate knowledge of Java programming.
- Development Environment: JDK 17 or higher, Maven or Gradle, IntelliJ IDEA or another text editor/IDE, API testing tool (Postman, HTTPie), Docker Desktop.
Key Learnings and Concepts
Project Setup: Spring Initializer
- Maven or Gradle as build tools.
- Basic directory structure and configuration files (pom.xml, application.properties).
- Using IntelliJ IDEA for code development.
- Importance of Spring Boot Dev Tools for development.
Building the REST API
- Defining models (e.g., Run class, enumerations like Location).
- Creating controllers (
@RestController) and mapping endpoints using annotations like @GetMapping, @PostMapping.
- Service layer and dependency injection (
@Autowired, constructor injection).
- Error handling using custom exceptions and
@ResponseStatus.
Database Integration
- Using H2 as an in-memory database for initial development and testing (schema.sql, data.sql scripts).
- Setting up PostgreSQL using Docker and Docker Compose for practical applications.
- Basic CRUD operations with JDBC Template and transition to Spring Data JDBC and JPA.
- Use of
@JdbcTest and @SpringBootTest for testing database interactions.
REST Clients
RestTemplate vs. WebClient vs. Spring's Rest Client API for communication with external services.
- Building and testing REST clients for scenarios like fetching user information from external APIs (
@HttpExchange, @GetExchange annotations).
Testing
- Overview of available testing libraries in Spring Boot: JUnit, Mockito, AssertJ, Hamcrest, JSONAssert, etc.
- Writing meaningful tests for controllers, services, repositories, and external clients (
@SpringBootTest, @JdbcTest, @MockMvc setup for controllers).
Conclusion and Additional Resources
- Repository and course notes on GitHub for continued learning and reference.
- Access to Spring resources: Spring Academy, Spring Developer YouTube channel, Spring Blog.
- Continuous learning through Dan’s YouTube Channel and Spring Academy.
Instructor's Final Words
- Emphasis on the importance of practice and real-world application of learned concepts.
- Encourage applying course learnings to personal projects and further exploration of Spring’s rich ecosystem.