Basic Concepts and Components of a Project
Explore the fundamental elements of a Spring Boot project such as the main application class, autoconfiguration, and component scanning. Understand how reactive web apps are launched without a traditional web container using Spring WebFlux and Reactor Netty integration.
We'll cover the following...
The initial code we’ve built is given below. Let’s explore some of the other files provided to us:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.greglturnquist</groupId>
<artifactId>hackingspringboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hackingspringboot</name>
<description>Demo project for Hacking with Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.fizzed</groupId>
<artifactId>fizzed-watcher-maven-plugin</artifactId>
<version>1.0.6</version>
<configuration>
<watches>
<watch>
<directory>src/main</directory>
<exclude>*.css</exclude>
<exclude>*.js</exclude>
<exclude>*.svg</exclude>
</watch>
</watches>
<goals>
<goal>compile</goal>
<goal>process-classes</goal>
</goals>
</configuration>
</plugin>
</plugins>
</build>
</project>
Java application class
In addition to the build file we just looked at, the Spring Initializr provides the following application file:
This class contains:
-
@SpringBootApplication: A composite annotation that introduces autoconfiguration and component scanning. -
main(String[] args): A runnable function to launch our application. -
SpringApplication.run(HackingSpringBootApplication.class, args): A Spring Boot hook to register this class as the launch point ...