Это 16-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
1. Реализация кода
1. Создайте проект maven, обычный java-проект
2. Добавьте начальные зависимости SpringBoot
SpringBoot требует, чтобы проект наследовал стартовые зависимости SpringBoot spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
SpringBoot необходимо интегрировать SpringMVC для разработки контроллера, поэтому проекту необходимо импортировать зависимости веб-запуска.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3. Напишите класс начальной загрузки SpringBoot
Класс начальной загрузки должен быть размещен в том же каталоге, что и контроллер и другие пакеты.
package com.xiaojian;
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);
}
}
4. Напишите класс контроллера
package com.xiaojian.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class QuickController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "hello SpringBoot";
}
}
Необходимо добавить @ResponseBody.
5. Тест
Доступ к браузеру: localhost:8080/быстрое отображение: привет, SpringBoot
Во-вторых, входной анализ
1. Анализ кода SpringBoot
- Во всех проектах SpringBoog зависимости родительского проекта (spring-boot-starter-parent) должны быть добавлены в pom.xml с последующим анализом исходного кода.
- Возьмите функцию как единое целое, если вам нужно, чтобы веб-функция была доступна в браузере, добавьте зависимости по порядку (spring-boot-starter-web)
- @SpringBootApplication, объявите, что этот класс является загрузочным классом SpringBoot. Метод run запускает загрузочный класс SpringBoot, а параметр является объектом байт-кода загрузочного класса.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
2. Горячее развертывание проекта Spring Boot (хорошо)
Мы неоднократно изменяем ресурсы, такие как классы и страницы, во время разработки. После каждой модификации нам нужно перезапустить, чтобы она вступила в силу, поэтому каждый запуск очень утомительный и тратит много времени. Мы можем изменить код, чтобы он вступил в силу без перезапуска. Эта функция может быть достигнуто путем добавления следующей конфигурации в pom.xml, которую мы называем горячим развертыванием.
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
ps: решение IDEA для отказа горячего развертывания SpringBoot
- Setting -> Compiler -> Build project automatically
- Затем Shift+Ctrl+Alt+/, выберите Registry, найдите в спискеcompile.automatically.allow.when.app.running и отметьте Finish.
3. Принципиальный анализ
1. Разбор принципа запуска зависимостей (см. исходный код)
-
Проанализируйте spring-boot-starter-parent
- Также есть родительские зависимости spring-boot-starter-dependencies в spring-boot-starter-parent, из которых видно, что определена версия, управление зависимостями и управление плагинами некоторых координат, поэтому наш проект SpringBoot наследует spring-boot-starter-parent После этого у него уже есть такая конфигурация, как блокировка версии.Таким образом, роль запуска зависимостей заключается в переносе зависимостей.
-
Анализировать spring-boot-starter-web
- spring-boot-starter-web должен «упаковать» координаты spring-web, spring-webmvc и т. д., которые будут использоваться в веб-разработке, чтобы наш проект мог запускать веб, пока координаты spring-boot-starter -Введены веб-зависимости запуска.Разработано, также отражает роль переноса зависимостей. То же самое относится и к функциям, которые необходимо добавить в будущем.
2. Автоматическая настройка
Аннотация @SpringBootApplicationЭквивалентно настройке трех аннотаций
@SpringBootConfiguration // 相当于 @Configuration ,配置Spring容器(@Bean,注册bean对象,标注在返回某个实例的方法)
@EnableAutoConfiguration // 自动配置
@ComponentScan( // 组件扫描,扫描与引导类同级目录包下的bean
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
Интерфейс EnableAutoConfiguration(важный)
@AutoConfigurationPackage
Сканировать пакет в каталоге того же уровня основного класса конфигурации (класс, отмеченный @SpringBootApplication) и все компоненты во всех следующих подпакетах в контейнер Spring
@Импортировать аннотацию:
Добавьте экземпляр в контейнер springIOC, импортировав
AutoConfigurationImportSelector:
Селектор компонентов для импорта
Все компоненты, которые необходимо импортировать, возвращаются как полные имена классов, эти компоненты добавляются в контейнер.
В контейнер будет импортировано множество классов автоматической конфигурации (xxxAutoConfiguration);
Он заключается в том, чтобы импортировать в контейнер все компоненты, необходимые для этой сцены, и настроить эти компоненты.
В методе получения полного имени класса в этом классе вызовитеgetCandidateConfigurations( ... )
loadFactoryNames( ... ), используйте загрузчик классов, чтобы загрузить ресурс в целевое расположение (то есть полное имя класса компонента, который необходимо импортировать), и сохраните его в свойствах, чтобы вернуть
Целевое местоположение
Схема всего процесса автоматического импорта компонентов:
Когда SpringBoot запускается, он получает значение, указанное EnableAutoConfiguration (полное имя класса компонента) из META-INF/spring.factories по пути к классам пакета autoconfigure springboot, и импортирует эти значения в контейнер как классы автоматической настройки для автоматическая настройка. Класс вступает в силу и помогает нам выполнять работу по автоматической настройке.
До того, как нам пришлось настраивать что-то самостоятельно, в этом нам помогал класс автоматической настройки (сравните основные свойства конфигурации в SSM).
В-четвертых, структура каталогов проекта SpringBoot
папка ресурсов
- static: сохранить все статические ресурсы, js, css, изображения;
- шаблоны: сохранить все страницы шаблонов; (Jar-пакет Spring Boot по умолчанию использует встроенный Tomcat, по умолчанию не поддерживает jsp-страницы), вы можете использовать механизмы шаблонов (freemarker, thymeleaf)
- application.properties: файл конфигурации приложения Spring Boot;