Пишите статьи серьезно и не будьте участником заголовков.
Статья вошла вGitHub.com/Ниу Мух/Java…иБлог программиста Аранга, обратите внимание, не потеряйтесь.
1. Введение
Springboot
Автоматическая настройка действительно удобна и снижает сложность нашей разработки, так в чем же принцип автоматической настройки? Я уже писал об этом статью.
Серия Springboot (3) Автоматическая конфигурация Spring Boot.
Поскольку автоматическая настройка использует привязку файлов конфигурации, если вы не знаете, как использовать общие файлы конфигурации, вы можете обратиться к этой статье.
Springboot Series (два) весенние загрузочные профили.
На этот раз, изучивSpringboot
Автоматический режим настройки, напишите свойstarter
, чтобы углубить ваше понимание автоконфигурации.
Знакомство с шаблонами помогает улучшить письмоstarter
нормативный, напишите свойstarter
До первого обученияSpringboot
официальныйstarter
и интеграция общих фреймворковstarter
В способе написания можно оценить тайну.
2. Официальный режим Springboot
Выберите официальную автоматическую конфигурацию для анализа, вот общая конфигурация номера порта конфигурации.
2.1. Введение зависимостей
Прежде чем использовать номер порта, нам нужно импортировать веб-зависимость.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
если вы наблюдаетеstarter
Если есть еще, может быть, вы нашли одинмодель,Springboot
Официальныйstarter
именаspring-boot-starter-xxxx
названный.
Проверятьspring-boot-starter-web
Вы обнаружите, что на самом деле эта зависимость является просто пустой коробкой, если не считать других зависимостей.pom
Кроме этого, нет ни одной строчки кода.
В это время другоймодель:starter
зависеть только от другихpom
Не занимайтесь реализацией кода.
Такspring-boot-starter-web
От чего это зависит?
Соблюдайте эту информацию о зависимости, а затем обратитесь к другим официальнымstarter
, можно найти несколько фиксированных интродукций, которые можно назватьмодельВведение зависимости.
- полагаться
spring-boot-starter
. - полагаться
spring-boot-autoconfigure
.
2.2. Автоматическая настройка
Импорт зависимости настраивает только номер порта, как здесь.
server.port=8090
ИДЕЯ может нажатьserver.port
Найдите файл класса, к которому привязана эта конфигурация. Вы можете видеть, что конфигурация в конечном итоге будет внедрена в классServerProperties
Категорияport
характеристики.
тогда этоServerProperties
Где он используется? продолжай искать, найди иServlet
родственные звонки.
найдено, чтоServletWebServerFactoryCustomizer
Класс вызывается, и этот класс определяет
private final ServerProperties serverProperties;
Свойства, используемые для использования конфигурации.
Продолжать смотреть на вызов этого класса и найти, что есть только один класс, который использует этот класс, этот классServletWebServerFactoryAutoConfiguration
.
Согласно нашему пониманию аннотации, этот класс является основным классом автоматической настройки. В то же время классы автоматической конфигурацииAutoConfiguration
конец.
Посмотрите на значение нескольких аннотаций этого класса.
- более высокий приоритет.
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
- только в
ServletRequest
Существование класса является веб-приложением.
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
- включенный
ServerProperties
привязки конфигурации.
@EnableConfigurationProperties(ServerProperties.class)
- Импортируются несколько классов.
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
В то же время введите конфигурацию в bean factory для других мест для вызова.
@Bean
public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(ServerProperties serverProperties) {
return new ServletWebServerFactoryCustomizer(serverProperties);
}
Является ли автоконфигурация только этими вещами? Согласно анализу в предыдущей статье, мы знаем, что читать нужно не только код, но и хотя бы один конфигурационный файл, определяющий класс автоматической настройки. этоspring.factories
документ.
Если вы не знаете, вы можете сначала прочитать эту статью.Серия Springboot (3) Автоматическая конфигурация Spring Boot.
Это действительно так, может бытьspring.factories
Найдите указанные выше классы в .
этоServletWebServerFactoryAutoConfiguration
.
Согласно вышеприведенному анализу, можно обнаружить, чтоSpringboot
официальныйstarter
немногомодель.
- использовать
XXXProperties
автоматическая привязкаXXX
Информация о конфигурации в начале, например:ServerProperties
. - Пучок
XXXProperties
Определяется в классе, который будет использоваться, например:ServletWebServerFactoryCustomizer
. - Напишите один
XXXAutoConfiguration
, наXXXProperties
автоматическую настройку, ограничить эффективную сцену и создать необходимые классы дляBean
фабрика. как:ServletWebServerFactoryAutoConfiguration
.
3. Сторонний режим интеграции
Springboot
Официально, если все фреймворки написаны какstarter
, нереально. Поэтому многие сторонние фреймворки необходимо активно интегрировать вspringboot
, поэтому мы выбираем широко используемый фреймворк для анализа егоstarter
выполнить. потому что я виделspringboot
официальныйstarter
Как он настраивается, сторонний фреймворк тоже похож, поэтому в процессе наблюдения ниже будут указаны те же самые моменты напрямую, а более подробные сравнения производиться не будут.
выбрать здесьmybatis-spring-boot-starter
Учитесь анализу.
3.1 Знакомство с зависимостями
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
здесьmybatis
обрамленныйstarter
зависеть от определенныхправило,Сейчасxxx-spring-boot-starter.
наблюдать за этимstarter
, обнаружил, что он также не выполнял никакой реализации кода, это иspringboot
Официальное соглашение.
Проверятьmybatis-spring-boot-starter
Зависимостей много, среди которых основная связана с автоматической настройкой.
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</dependency>
3.2 Автоматическая конфигурация
Проверятьmybatis-spring-boot-autoconfigure
обнаружение контента иspringboot
Официальныйautoconfigure
Конструктивно они аналогичны.
mybatis
Автоконфигурация также выполняется черезspring.factories
чтобы указать автоматическую настройку, затем передайтеXxxAutoConfiguration
связыватьXxxProperties
для автоматической настройки.
В принципе и вышеspringboot
Официальныйstarter
одинаковы, поэтому я не буду вводить слишком много.
4. Напишите свой собственный стартер
Сказав так много, мы, наконец, подошли к практической части.С помощью вышеприведенного введения мы можем примерно нарисовать свою собственнуюstarter
шаг.
- Создать имя как
xxx-spring-boot-starter
проект запуска. - Создать имя как
xxx-spring-boot-autoconfigure
S проект.- Напишите класс привязки свойства
xxxProperties
. - Написать класс обслуживания, импортировать
xxxProperties
. - Напишите класс автоконфигурации
XXXAutoConfiguration
Внедрить конфигурацию. - Создайте
spring.factories
файл, в котором указаны классы для автоматической настройки.
- Напишите класс привязки свойства
- Стартовый проект — это пустой проект для импорта
xxx-spring-boot-autoconfigure
и другие зависимости. - Введение проекта
starter
, настройте информацию, которую необходимо настроить.
4.1 Создать проект запуска
Поскольку стартер не требует реализации кода и должен зависеть только от других проектов, пустой проект maven создается напрямую. Но имя должно быть стандартизировано.
создано здесьstarter
даmyapp-spring-boot-starter
.
Файл pom очень прост, просто импортируйте следующийmyapp-spring-boot-autoconfigure
.
<?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>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 启动器 -->
<dependencies>
<!-- 引入自动配置项目 -->
<dependency>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
4.2 Создание проекта автоконфигурации
комбинированное лицоstarter
Анализ, непосредственно создайте имя какmyapp-spring-boot-autoconfigure
с проект. Только импортированные в проектspringboot
родительский проект иspring-boot-starter
.
<?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.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myapp-spring-boot-autoconfigure</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
Общая структура проекта показана на рисунке.
существуетHelloProperties
через аннотацию@ConfigurationProperties(prefix = "myapp.hello")
Пусть свойства в классе такие же, какmyapp.hello
Конфигурация в начале привязана.
/**
* <p>
*
* @Author niujinpeng
* @Date 2019/10/29 23:51
*/
@ConfigurationProperties(prefix = "myapp.hello")
public class HelloProperties {
private String suffix;
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
затем вHelloService
серединаsayHello
использование методаHelloProperties
Автоматически привязанное значение в .
public class HelloService {
HelloProperties helloProperties;
public String sayHello(String name) {
return "Hello " + name + "," + helloProperties.getSuffix();
}
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
}
чтобыHelloService
Может вводиться автоматически и может использоваться в обычном режимеHelloProperties
, по этому мы
HelloServiceAutoConfiguration
дескриптор классаHelloProperties.class
Введенный, затемHelloService
вводить вBean
.
/**
* web应用才生效
*/
@ConditionalOnWebApplication
/**
* 让属性文件生效
*/
@EnableConfigurationProperties(HelloProperties.class)
/***
* 声明是一个配置类
*/
@Configuration
public class HelloServiceAutoConfiguration {
@Autowired
private HelloProperties helloProperties;
@Bean
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setHelloProperties(helloProperties);
return helloService;
}
}
Наконец вspring.factories
Вам нужно только указать класс для автоматической настройки.
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
net.codingme.starter.HelloServiceAutoConfiguration
На этом проект автоматической настройки завершен. допустимыйmyapp-spring-boot-autoconfigure
Реализация проектаmvn install
Упакуйте проект автоконфигурации в локальный репозиторий, затем используйте ту же команду дляmyapp-spring-boot-starter
Установка на склад. Потому что последний зависит от первого проекта, так что здесь первый требует продвинутогоmvn install
.
4.3 Использование пользовательского лаунчера
Создаватьspringboot
проектmyapp-spring-boot-starter-test
.
вводитьweb
Зависимость от введения я написалmyapp-spring-boot-starter
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入自己的 starter -->
<dependency>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
написатьHelloController
Внедрить в автоконфигурациюHelloService
для тестирования.
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/hello")
public String sayHello(String name) {
return helloService.sayHello(name);
}
}
так какautoConfigure
определено в проектеsayHello
Метод выведет «Привет» + входящее имя + настроеноhello.suffix
, по этому мыspringboot
Настройте это свойство в файле конфигурации.
myapp.hello.suffix=早上好
Запустите тестовый проект, перейдите по пути /hello и введите имя, чтобы увидеть, сработает ли автоматическая настройка.
По результатам теста мы видим, что автоматическая настройка доброго утра вступила в силу. написано здесьstarter
также был завершен.
проект отправлен наGithub.
GitHub.com/Демон-бык/Судный день…
Спринбот серии Артикул
Springboot Series (1) Начало работы с Spring Boot
Серия Springboot (2) Конфигурационный файл Spring Boot
Серия Springboot (3) Автоматическая конфигурация Spring Boot
Springboot Series (4) Spring Boot Logging Framework
Серия Springboot (5) Статические ресурсы и механизм шаблонов для веб-разработки Spring Boot
Серия Springboot (6) Перехватчики и три основных компонента веб-разработки Spring Boot
Springboot Series (7) Анализ механизма обработки ошибок исключений для веб-разработки
Springboot Series (8) Ручная реализация шаблонов динамического баннера и преобразования изображения в символ
Серия Springboot (9) Мониторинг источников данных с использованием Spring JDBC и Druid
Серия Springboot (10) Доступ к базе данных с использованием данных Spring jpa
Серия Springboot (11) Использование Mybatis для доступа к базе данных
Серия Springboot (12) Используйте Mybatis для интеграции плагина пейджинга pagehelper и плагина mapper.
Серия Springboot (тринадцать) с использованием почтового сервиса
Серия Springboot (14) позволяет быстро включить HTTPS для шифрования вашего веб-сайта.
Серия Springboot (15) Как написать свой собственный стартер Springboot
Hello world :)
Я Аланг, яркая луна и чистый ветер, человек с техническими инструментами, который каждый день передвигает кирпичи.
Персональный сайт:www.wdbyte.com
Если вы хотите подписаться, вы можете подписатьсяпублика "Программист Аранг",илиБлог программиста Аранга,илиДобавьте меня в WeChat (wn8398).Эта статья также была организована вGitHub.com/Ниу Мух/Java…, добро пожаловать Звезда.