Создадим самую простую программу на Spring
Скачать исходники можно отсюда: https://github.com/OldAl67/Samples.Sample1.
Команда: git clone https://github.com/OldAl67/Samples.Sample1
.
Для начала соберем и запустим приложение из проекта Sample1:

Последние две строки в консоли будут примерно такими:
Tomcat started on port(s): 8080 (http) with context path ''
Started Application in 4.463 seconds (JVM running for 5.247)
Они сообщают нам что приложение стартовало под управлением сервера Tomcat
После старта приложения откроем браузер и перейдем по ссылке:
Ctrl-КЛИК: http://localhost:8080/say/hello.
Результат:

Рассмотрим подробнее проект.
Проект содержит три файла:
pom.xml – файл проекта.
Application.java – класс с которого начинается выполнение приложения.
HelloWorldController.java – класс, который возвращает html-страницу с приветствием “Hello World!”.
Файл проекта.
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>ru.samples</groupId>
<artifactId>sample1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Существенные теги
parent: spring-boot-starter-parent – управляет версиями зависимостей, подключаемых к проекту.
dependencies.dependency: spring-boot-starter-web – подключает все зависимости, необходимые для разработки web-приложений. В том числе и сервер Tomcat.
build.plugins.plugin: spring-boot-maven-plugin – плагин, собирающий Spring-boot приложение.
Класс приложения Application
С этого класса начинается исполнение Spring-boot приложения:
package ru.samples.sample1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main (String [] args) {
SpringApplication.run(Application.class, args);
}
}
При запуске вызывается функция main этого класса. В свою очередь функция main запускает приложение Spring и передает ему ссылку на свой класс:
SpringApplication.run(Application.class, args);
С этого момента начинается построение контекста приложения (ApplicationContext).
Пакет, в котором находится класс Application считается корневым. Spring сканирует все классы и пакеты, находящиеся в корневом пакете и находит классы, помеченные как компоненты Spring. Для таких классов создаются объекты и помещаются в контекст приложения.
После того как все компоненты помещены в контекст, запускается сервлет под управлением Tomcat, который реализует отображение запросов на соответствующие функции компонент.
Класс HelloWorldController
Одним из классов – компонентов Spring в нашем примере является класс HelloWorldController:
package ru.samples.sample1.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("say")
public class HelloWorldController {
@GetMapping(value = "hello",produces= "text/html")
public String sayHello () {
return
"<!DOCTYPE html>"+
"<html>"+
" <head><title>Hello world!</title></head>"+
" <body>Hello world!</body>"+
"</html>"
;
}
}
На то, что этот класс является компонентой Spring, указывает аннотация @RestController
.
Spring обнаруживает эту аннотацию, создает экземпляр этого класса и помещает его в контекст приложения. При этом URI “say/hello” отображается на функцию sayHello.
Получив запрос от браузера, сервлет Spring находит соответствующую запросу функцию, вызывает её и возвращает результат браузеру.