Spring Boot Backend Development Course, Blog Screen Configuration Example, Understanding Template Engine

In recent years, the importance of Rapid Application Development has grown, positioning Spring Boot as a powerful framework for efficiently creating Java-based web applications. In this course, we will explore how to develop a backend using Spring Boot, provide examples of blog screen composition, and delve into the concept of template engines.

1. What is Spring Boot?

Spring Boot is built on the Spring framework to simplify the settings and deployment of applications. Developers can quickly start applications without complex XML configurations or numerous library settings. A significant advantage is that it uses an embedded server, allowing the creation of standalone applications as JAR files without the need to create WAR files.

1.1 Key Features of Spring Boot

  • Auto-configuration: Spring Boot automatically configures the necessary settings, helping developers to work more conveniently.
  • Optional Dependency Management: Dependencies can be easily added, and they can be managed effortlessly using Maven or Gradle.
  • Command-based development: Using Spring Boot Starter, projects can be easily created from the command line interface (CLI).

2. Setting Up the Spring Boot Environment

The first step to starting with Spring Boot is setting up the development environment. We will install Spring Boot and implement basic settings through the following steps.

2.1 JDK Installation

To use Spring Boot, you need the Java Development Kit (JDK). Download and install the JDK from the official Oracle website.

2.2 IntelliJ IDEA Installation

For Spring Boot development, you need a convenient development tool like IntelliJ IDEA or Eclipse. Download and install the IDE of your choice.

2.3 Creating a New Project

1. Open IntelliJ IDEA and select 'New Project'
2. Choose Spring Initializr
3. Enter project metadata (group, artifact, name, etc.)
4. Select necessary dependencies (Spring Web, Spring Data JPA, etc.)
5. Complete project creation

3. Designing RESTful API

The biggest advantage of backend development using Spring Boot is the ease of implementing RESTful APIs. You can design APIs that follow the REST (Representational State Transfer) architectural style to efficiently handle communication with clients.

3.1 Creating a Basic Structure

Now, let’s create a simple RESTful API. First, create a controller class.

@RestController
@RequestMapping("/api/v1/blogs")
public class BlogController {
    private final BlogService blogService;

    public BlogController(BlogService blogService) {
        this.blogService = blogService;
    }

    @GetMapping
    public List getAllBlogs() {
        return blogService.getAllBlogs();
    }

    @PostMapping
    public Blog createBlog(@RequestBody Blog blog) {
        return blogService.createBlog(blog);
    }
}

3.2 Creating the Blog Service Class

The service class handles the business logic.

@Service
public class BlogService {
    @Autowired
    private BlogRepository blogRepository;

    public List getAllBlogs() {
        return blogRepository.findAll();
    }

    public Blog createBlog(Blog blog) {
        return blogRepository.save(blog);
    }
}

4. Database Setup

Now, you can connect to a database to store and manage blog data. Using Spring Data JPA makes it easy to interact with the database.

4.1 Adding Dependencies

Add H2 database and Spring Data JPA dependencies to the pom.xml file.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

4.2 Creating the Entity Class

Create an entity class that represents the blog data.

@Entity
public class Blog {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String content;
    private String author;

    // Getters and Setters
}

5. Blog Screen Composition

Now that we have completed the backend for the blog, let’s prepare the screen composition for connecting it with the frontend. The frontend should be ready to display data through REST API calls.

5.1 HTML Template

Using the principles of blending, create the HTML structure for the blog. With a template engine like Thymeleaf, you can dynamically display data.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <div th:each="blog : ${blogs}">
        <h2 th:text="${blog.title}"></h2>
        <p th:text="${blog.content}"></p>
        <p>Author: <span th:text="${blog.author}"></span></p>
    </div>
    <form action="/api/v1/blogs" method="post">
        <input type="text" name="title" placeholder="Title" required><br>
        <textarea name="content" placeholder="Content" required></textarea><br>
        <input type="text" name="author" placeholder="Author" required><br>
        <button type="submit">Add Post</button>
    </form>
</body>
</html>

5.2 Thymeleaf Template Engine

Thymeleaf is a frequently used template engine with Spring Boot. It can generate HTML on the server side and combine it with dynamic data to return to the client.

6. Concept of Template Engines

A template engine is a tool for dynamically generating HTML content in web applications. Developers can insert data into a predefined HTML structure to create the final content shown to users.

6.1 Types of Template Engines

  • Thymeleaf: The most widely used template engine in Spring-based applications. It is easy to use due to its compatibility with HTML5.
  • Freemarker: Provides powerful features for template files and can output in various formats, including XML.
  • Mustache: Minimizes logic and offers a simple and intuitive syntax.

6.2 How Template Engines Work

Template engines work by using HTML template files requested by the client, combining them with data on the server, and then returning the final generated HTML file to the client. This process works in a server-side rendering mode, making it easy for SEO optimization.

Conclusion

In this course, we have learned the basics of backend development using Spring Boot. We hope this has motivated you to build actual applications through blog screen composition examples and the concept of template engines. We encourage you to implement more complex systems and diverse features with Spring Boot. In the next course, we will cover more in-depth topics.

Spring Boot Backend Development Course, Beans and Spring Container

Spring Boot is a framework for developing Java-based enterprise applications, helping to develop web applications quickly and easily. At its core is the Spring container, and the concept of beans is a key element of Spring applications. In this lecture, we will take a closer look at beans and the Spring container.

1. Overview of Spring Framework

The Spring framework is an application framework for the Java platform that allows developers to manage the lifecycle of beans and connect components through Dependency Injection. This reduces software coupling, improves testability, and enhances maintainability.

2. Spring’s Container

The Spring container is a crucial part that manages the components of an application. It is responsible for object creation, configuration, and dependency injection. The two main containers of Spring are:

  • BeanFactory: The most basic container, which creates objects using lazy loading.
  • ApplicationContext: It includes all the functionalities of BeanFactory and provides more features. For example, it supports internationalization, event propagation, and various application components through layers.

3. Concept of Bean

In Spring, a bean refers to an object managed by the Spring container. Beans are generally necessary for executing the business logic of the application. Beans can be defined in XML files or Java configuration files.

When defining a bean, the following elements should be considered:

  • scope: Defines the lifecycle of the bean. Common scopes include singleton, prototype, request, session, and global session.
  • qualifier: Provides a method to select a specific bean when multiple beans are available.
  • autowiring: The method by which the Spring container automatically injects the dependencies of the bean.

4. Bean Lifecycle

Spring can manage the lifecycle of beans in various states. Let’s examine the process from the creation to the destruction of a bean.

  1. Bean Instantiation: The Spring container creates the bean object.
  2. Dependency Injection: Injects the required dependencies.
  3. Initialization: The initialization method is called. At this stage, the application is set up so that the bean is ready for use.
  4. Usage: The bean is used to handle requests or perform specific tasks.
  5. Destruction: The bean is destroyed when the application is terminated. At this stage, necessary cleanup tasks are performed.

5. Bean Definition

There are several ways to define a bean, but XML configuration files and Java-based configuration files are mainly used. Let’s explore each method.

5.1 Defining Beans with XML Configuration Files

The method for defining beans in an XML configuration file is as follows:

        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">

            <bean id="exampleBean" class="com.example.Example">
                <property name="propertyName" value="propertyValue"/>
            </bean>

        </beans>
        

5.2 Java-based Configuration Method

When defining a bean through Java-based configuration, you can use the @Configuration and @Bean annotations.

        @Configuration
        public class AppConfig {
        
            @Bean
            public Example exampleBean() {
                return new Example("propertyValue");
            }
        }
        

6. Dependency Injection

Dependency injection is a way to establish and manage the relationships between objects, and there are three methods of injection.

  • Constructor Injection: Dependency is injected through the constructor of the bean.
  • Setter Injection: Dependency is injected through setter methods.
  • Field Injection: Dependency is injected directly into the fields. However, this method is not recommended.

6.1 Constructor Injection Example

        public class SampleBean {
            private final DependencyBean dependency;

            public SampleBean(DependencyBean dependency) {
                this.dependency = dependency;
            }
        }
        

6.2 Setter Injection Example

        public class SampleBean {
            private DependencyBean dependency;

            @Autowired
            public void setDependency(DependencyBean dependency) {
                this.dependency = dependency;
            }
        }
        

7. Defining Scope of Beans

Spring allows you to set scopes to manage the lifecycle of beans effectively. Below are the characteristics of each scope.

  • singleton: The default scope, only one instance per application is created.
  • prototype: A new instance is created every time it is requested.
  • request: One instance is created per HTTP request in a web application.
  • session: One instance is created per HTTP session.
  • globalSession: An instance shared across all sessions in a portal application.

8. Initializing Spring Container

Before starting a Spring application, the Spring container must be initialized. Typically, this is done by calling the SpringApplication.run() method.

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

9. Bean Profiles

Spring supports profiles to allow the configuration of beans based on the environment. Using profiles, you can maintain bean settings suitable for development, testing, and production environments.

        @Profile("dev")
        @Bean
        public DataSource devDataSource() {
            return new HikariDataSource();
        }

        @Profile("prod")
        @Bean
        public DataSource prodDataSource() {
            return new HikariDataSource();
        }
        

10. Conclusion

Spring Boot is a powerful framework that supports backend application development, and understanding beans and the Spring container is essential for comprehending the structure and operation of applications. In this lecture, we discussed bean definitions, lifecycles, dependency injection, scopes, and initialization methods. We look forward to learning more in future lectures and developing real applications using Spring Boot.

Spring Boot Backend Development Course, Blog Screen Composition Example, Adding Dependencies for Using Thymeleaf

Introduction

Spring Boot is a lightweight web application framework based on the Spring Framework, designed to help developers quickly build applications. In particular, Spring Boot offers many features in backend development, such as RESTful web services, database integration, and security management. In this tutorial, we will cover an example of configuring a blog screen using Spring Boot and learn about adding dependencies for Thymeleaf.

Blog Screen Configuration Example

1. Creating the Project

To create a Spring Boot project, we will use Spring Initializr. Please select the following settings.

  • Project: Gradle Project
  • Language: Java
  • Spring Boot: 2.7.0 (select the latest version)
  • Group: com.example
  • Artifact: blog
  • Name: blog
  • Description: Blog application
  • Package name: com.example.blog
  • Packaging: Jar
  • Java: 11

Next, add ‘Spring Web’, ‘Thymeleaf’, ‘Spring Data JPA’, and ‘H2 Database’ in the Dependencies section and generate the project.

2. Adding Dependencies

Once the Spring Boot project is created, let’s check the required dependencies in the build.gradle file. The dependencies should be added as shown below.

dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        runtimeOnly 'com.h2database:h2'
    }

3. Designing the Blog Domain

Now, let’s design the domain model that will constitute the blog. A model representing blog posts is essential.

package com.example.blog.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String content;

    // getters and setters
}

4. Adding the Repository

Let’s add the repository interface. This will contain the logic to interact with the database.

package com.example.blog.repository;

import com.example.blog.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository {
}

5. Adding the Service Layer

We will now add a service layer to manage blog posts. This will include methods for creating and retrieving posts.

package com.example.blog.service;

import com.example.blog.model.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PostService {
    @Autowired
    private PostRepository postRepository;

    public List getAllPosts() {
        return postRepository.findAll();
    }

    public Post savePost(Post post) {
        return postRepository.save(post);
    }
}

6. Adding the Controller

Now, let’s add a controller to handle requests for the web application.

package com.example.blog.controller;

import com.example.blog.model.Post;
import com.example.blog.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/posts")
public class PostController {
    @Autowired
    private PostService postService;

    @GetMapping
    public String listPosts(Model model) {
        List posts = postService.getAllPosts();
        model.addAttribute("posts", posts);
        return "postList";
    }

    @GetMapping("/new")
    public String newPostForm(Model model) {
        model.addAttribute("post", new Post());
        return "postForm";
    }

    @PostMapping
    public String savePost(Post post) {
        postService.savePost(post);
        return "redirect:/posts";
    }
}

7. Configuring Thymeleaf Templates

Now, let’s configure the blog screen using Thymeleaf. Create postList.html and postForm.html files in the src/main/resources/templates folder.

postList.html

<!DOCTYPE html>
    <html xmlns:th="http://www.w3.org/1999/xhtml">
        <head>
            <title>Blog Post List</title>
        </head>
        <body>
            <h1>Blog Post List</h1>
            <a href="@{/posts/new}">Create New Post</a>
            <ul>
                <li th:each="post : ${posts}">
                    <h2 th:text="${post.title}"></h2>
                    <p th:text="${post.content}"></p>
                </li>
            </ul>
        </body>
    </html>

postForm.html

<!DOCTYPE html>
    <html xmlns:th="http://www.w3.org/1999/xhtml">
        <head>
            <title>Create New Post</title>
        </head>
        <body>
            <h1>Create New Post</h1>
            <form th:action="@{/posts}" method="post">
                <label for="title">Title</label>
                <input type="text" id="title" name="title" required/>

                <label for="content">Content</label>
                <textarea id="content" name="content" required></textarea>

                <button type="submit">Save</button>
            </form>
        </body>
    </html>

Conclusion

In this tutorial, we learned how to create a simple blog application using Spring Boot. We implemented features for writing blog posts and retrieving the list of posts, as well as how to create HTML templates with Thymeleaf. Based on this tutorial, feel free to add more complex features to create your own blog.

Additional Resources

If you want to learn more, consider checking the following resources.

Spring Boot Backend Development Course, Blog Screen Layout Example, Writing Controllers for Learning Thymeleaf Syntax

1. Overview

This course helps to provide a basic understanding of backend development using Spring Boot and explains how to learn Thymeleaf syntax through a blog screen composition example.

Spring Boot is a Java-based web application framework that helps you create web applications quickly and easily without complex configurations. This allows developers to focus on business logic and increase productivity.

2. Tech Stack

The main tech stack used in this course includes:

  • Java 11 or higher
  • Spring Boot 2.x
  • Thymeleaf
  • Spring Data JPA
  • H2 Database

This tech stack forms a strong combination for backend development. A brief description of each tech stack is as follows.

  • Java: An object-oriented programming language that is platform-independent.
  • Spring Boot: A framework that simplifies configuration and deployment in Java Spring.
  • Thymeleaf: An HTML5 template engine used for composing views.
  • Spring Data JPA: A library that makes it easier to interact with the database.
  • H2 Database: A lightweight, in-memory database suitable for testing and prototyping.

3. Project Setup

To set up a Spring Boot project, use Spring Initializr. Access Spring Initializr and configure the following settings:

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 2.x
  • Group: com.example
  • Artifact: blog
  • Dependencies: Spring Web, Thymeleaf, Spring Data JPA, H2 Database

Save the above settings and download the project. Then import it in your IDE to start working.

4. Create Entity Class

Create entity classes to define the data models needed for the application. To store basic blog posts, the Post entity class is created as follows:

package com.example.blog.model;

import javax.persistence.*;

@Entity
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    private String author;

    // getters and setters
}

This class contains the ID, title, content, and author of the post. It handles the mapping to the database using JPA.

5. Create Repository Interface

Create a repository interface that extends JpaRepository to handle CRUD operations for the Post entity:

package com.example.blog.repository;

import com.example.blog.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository {
}

This interface allows easy access to CRUD operations associated with the Post entity in the database.

6. Write Service Class

Create a service class that handles business logic and defines business rules. The PostService class is written as follows:

package com.example.blog.service;

import com.example.blog.model.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PostService {
    private final PostRepository postRepository;

    @Autowired
    public PostService(PostRepository postRepository) {
        this.postRepository = postRepository;
    }

    public List findAll() {
        return postRepository.findAll();
    }

    public Post save(Post post) {
        return postRepository.save(post);
    }

    public Post findById(Long id) {
        return postRepository.findById(id).orElse(null);
    }

    public void deleteById(Long id) {
        postRepository.deleteById(id);
    }
}

This class defines methods to retrieve the list of posts, save posts, and delete posts.

7. Write Controller

Now, let’s write the controller class to handle client requests. The PostController class can be written as follows:

package com.example.blog.controller;

import com.example.blog.model.Post;
import com.example.blog.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/posts")
public class PostController {
    private final PostService postService;

    @Autowired
    public PostController(PostService postService) {
        this.postService = postService;
    }

    @GetMapping
    public String list(Model model) {
        List posts = postService.findAll();
        model.addAttribute("posts", posts);
        return "post/list";
    }

    @GetMapping("/new")
    public String createForm(Model model) {
        model.addAttribute("post", new Post());
        return "post/form";
    }

    @PostMapping
    public String create(Post post) {
        postService.save(post);
        return "redirect:/posts";
    }
    
    @GetMapping("/{id}")
    public String view(@PathVariable Long id, Model model) {
        Post post = postService.findById(id);
        model.addAttribute("post", post);
        return "post/view";
    }

    @GetMapping("/edit/{id}")
    public String editForm(@PathVariable Long id, Model model) {
        Post post = postService.findById(id);
        model.addAttribute("post", post);
        return "post/form";
    }

    @PostMapping("/edit/{id}")
    public String edit(@PathVariable Long id, Post post) {
        post.setId(id);
        postService.save(post);
        return "redirect:/posts";
    }

    @GetMapping("/delete/{id}")
    public String delete(@PathVariable Long id) {
        postService.deleteById(id);
        return "redirect:/posts";
    }
}

The controller defines handler methods for HTTP requests following the pattern. The above code implements listing, creating, editing, and deleting posts functionalities.

8. Write Thymeleaf Template

Now it’s time to create the HTML view using Thymeleaf. The list.html to display the list of posts can be written as follows:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Post List</title>
</head>
<body>
    <h1>Post List</h1>
    <a href="@{/posts/new}">Create New Post</a>
    <ul>
        <li th:each="post : ${posts}">
            <a th:href="@{/posts/{id}(id=${post.id})}">[[${post.title}]]</a>
        </li>
    </ul>
</body>
</html>

The above template displays the list of posts, where clicking on each post title will take you to the details page of that post.

9. Conclusion

This course introduced how to build a simple blog application using Spring Boot and Thymeleaf. I hope it helped you understand basic backend development by creating entity, repository, service, controller, and view step by step.

If you want to add more features, consider implementing comment functionality for posts, user authentication, and permission management. This will help you build a solid foundation for more advanced web application development.

Spring Boot Backend Development Course, Blog Screen Composition Example, Writing Controller Methods

1. Introduction

Spring Boot is a framework for Java development that helps developers quickly create applications with minimal configuration. This tutorial provides a detailed explanation of how to develop the backend of a blog application using Spring Boot. The goal of this article is to structure the basic screen of the blog and to write controller methods for it.

2. Setting Up the Development Environment

There are a few essential requirements for developing a Spring Boot application.

  • Java Development Kit (JDK) 11 or higher
  • IDE (e.g., IntelliJ IDEA, Eclipse)
  • Gradle or Maven (build tools)
  • Spring Boot CLI (optional)

Please prepare the above items. Now let’s create a simple blog project using Spring Boot.

3. Creating a Spring Boot Project

A Spring Boot project can be easily created through Spring Initializr (https://start.spring.io/). Add the necessary dependencies as follows:

  • Spring Web
  • Spring Data JPA
  • H2 Database

After creating the project, open it in the IDE to check the basic structure.

4. Creating Domain Models and Repository

To structure the blog, we must first define the domain model. A typical blog includes Posts and Comments.

4.1 Creating Post Entity


package com.example.blog.model;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Post {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @Column(columnDefinition = "TEXT")
    private String content;

    private LocalDateTime createdAt;

    // Getters and Setters
}
    

The above code defines the Post entity. It includes a title, content, and creation date. Next, we will create a repository for this entity.

4.2 Creating Post Repository


package com.example.blog.repository;

import com.example.blog.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository {
}
    

5. Creating Controller and Writing Methods

Now we are ready to create a controller to handle HTTP requests. Let’s write a controller that provides basic CRUD functionality for the blog.

5.1 Creating PostController


package com.example.blog.controller;

import com.example.blog.model.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/posts")
public class PostController {
    
    @Autowired
    private PostRepository postRepository;

    @GetMapping
    public List getAllPosts() {
        return postRepository.findAll();
    }

    @GetMapping("/{id}")
    public Post getPost(@PathVariable Long id) {
        return postRepository.findById(id).orElse(null);
    }

    @PostMapping
    public Post createPost(@RequestBody Post post) {
        post.setCreatedAt(LocalDateTime.now());
        return postRepository.save(post);
    }

    @PutMapping("/{id}")
    public Post updatePost(@PathVariable Long id, @RequestBody Post postDetails) {
        Post post = postRepository.findById(id).orElse(null);
        if(post != null) {
            post.setTitle(postDetails.getTitle());
            post.setContent(postDetails.getContent());
            return postRepository.save(post);
        }
        return null;
    }

    @DeleteMapping("/{id}")
    public void deletePost(@PathVariable Long id) {
        postRepository.deleteById(id);
    }
}
    

In the above code, we defined various methods that perform CRUD (Create, Read, Update, Delete) functions.
Each method is responsible for retrieving the list of posts, fetching a specific post, creating a new post,
updating a post, or deleting a post.

6. Running the Application

Once all configurations are complete, you are ready to run the application. Click the run button in your IDE to execute the application.
The embedded Tomcat server will run by default, and by accessing http://localhost:8080/api/posts using a web browser,
you can check the list of posts through the methods you just wrote.

7. Conclusion

In this tutorial, we explained the basic backend structure of a blog application using Spring Boot.
We hope this has helped you lay the foundation for backend development, and may you progress further through continuous learning.
Thank you.