Запустите Starter в Spring Boot голыми руками, чтобы расшифровать черную магию автоматической настройки!

Spring Boot
Запустите Starter в Spring Boot голыми руками, чтобы расшифровать черную магию автоматической настройки!

Мы используем Spring Boot, в основном балуясь удобством его Stater. Starter предоставляет нам множество автоматизированных конфигураций. С помощью этих автоматизированных конфигураций мы можем создать среду разработки производственного уровня, не напрягаясь. Некоторые друзья сочтут этот Starter потрясающим! На самом деле, Starter также реализуется базовыми знаниями в Spring + SpringMVC, Сегодня Songge принесет вам Starter и медленно раскроет тайну Starter!

основные знания

По сути, ядром Starter является условная аннотация.@Conditional, Когда в пути к классам существует определенный класс, вступает в силу определенная конфигурация. Сонг Гэ научил вас многому в Spring Boot, и некоторые из них также включают интерпретацию исходного кода. Вы также можете найти интерпретацию исходного кода. Условные аннотации будут появляться всегда.По сути, это одно из ядер конфигурации Starter.Если вам интересно, вы можете просмотреть историю и прочитать статью о Spring Boot, написанную Сонг Гэ ранее.Я не буду повторяться здесь.

Определите свой собственный Стартер

определение

Так называемый Starter на самом деле является обычным проектом Maven, поэтому для настройки Starter нам нужно сначала создать обычный проект Maven.После завершения создания добавьте класс автоматической настройки Starter следующим образом:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>2.1.4.RELEASE</version>
</dependency>

После завершения настройки мы сначала создаем класс HelloProperties, чтобы принимать значения, введенные в application.properties, следующим образом:

@ConfigurationProperties(prefix = "javaboy")
public class HelloProperties {
    private static final String DEFAULT_NAME = "江南一点雨";
    private static final String DEFAULT_MSG = "牧码小子";
    private String name = DEFAULT_NAME;
    private String msg = DEFAULT_MSG;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

Этот класс конфигурации хорошо понятен, вводя значения свойств, настроенные в application.properties, непосредственно в этот экземпляр,@ConfigurationPropertiesТипобезопасное внедрение свойств, то есть вставка свойств с префиксом javaboy в файле application.properties в свойства, соответствующие этому классу.При окончательном использовании файл конфигурации в application.properties выглядит примерно следующим образом:

javaboy.name=zhangsan
javaboy.msg=java

Сосредоточив внимание на безопасном внедрении свойств, читатели могут обратиться к этой предыдущей статье Song Ge:Введение в конфигурацию yaml в Spring Boot, хотя эта статья посвящена настройке yaml, внедрение свойств безопасности типов — это то же самое, что и свойства.

После настройки HelloProperties давайте определим HelloService, а затем определим простой метод say.Определение HelloService выглядит следующим образом:

public class HelloService {
    private String msg;
    private String name;
    public String sayHello() {
        return name + " say " + msg + " !";
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Это очень просто, ничего не скажешь.

Далее наша игра с тяжелой осью, определение класса автоматической конфигурации, после использования множества пользовательских классов, определенных другими, мы также сами определяем пользовательский класс. Давайте сначала посмотрим на код, а затем Сун Гэ будет медленно его объяснять:

@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
public class HelloServiceAutoConfiguration {
    @Autowired
    HelloProperties helloProperties;

    @Bean
    HelloService helloService() {
        HelloService helloService = new HelloService();
        helloService.setName(helloProperties.getName());
        helloService.setMsg(helloProperties.getMsg());
        return helloService;
    }
}

Что касается этого раздела автоматической настройки, объяснение следующее:

  • Во-первых, аннотация @Configuration указывает, что это класс конфигурации.
  • Аннотация @EnableConfigurationProperties предназначена для того, чтобы @ConfigurationProperties, которые мы настроили ранее, вступили в силу, позволяя настроенным свойствам успешно войти в bean-компонент.
  • @ConditionalOnClass означает, что следующая конфигурация вступает в силу только в том случае, если HelloService существует в текущем пути к классам проекта.
  • Сначала внедряется класс автоконфигурации HelloProperties Этот экземпляр содержит соответствующие данные, которые мы настроили в application.properties.
  • Предоставьте экземпляр HelloService и внедрите в него значения из HelloProperties.

После этого шага наш класс автоматической настройки завершен, а затем нам нужен файл spring.factories, так для чего же этот файл? Все мы знаем, что класс запуска нашего проекта Spring Boot имеет аннотацию @SpringBootApplication, которая определяется следующим образом:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM,
				classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

Вы можете видеть, что это комбинированная аннотация, и один из элементов комбинации — @EnableAutoConfiguration. Что делает эта аннотация?

@EnableAutoConfiguration означает включение автоматической настройки контекста приложения Spring.Эта аннотация автоматически импортирует класс с именем AutoConfigurationImportSelector, и этот класс будет читать файл с именем spring.factories, который определяет автоматизацию, которую необходимо загрузить Класс конфигурации, мы открываем Стартер любого фреймворка мы видим, что он имеет файл spring.factories, например, Стартер MyBatis выглядит следующим образом:

Затем нам понадобится такой файл для настройки Starter.Мы сначала создаем папку с именем META-INF в каталоге ресурсов проекта Maven, а затем создаем в папке файл с именем spring.factories.Содержимое файла следующее :

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.mystarter.HelloServiceAutoConfiguration

Просто укажите здесь путь к нашему классу конфигурации автоматизации.

После этого наш класс автоматической настройки завершен.

локальная установка

Если вы работаете в компании, вам может понадобиться упаковать класс конфигурации автоматизации, который вы только что написали, а затем загрузить его на частный сервер Maven, чтобы другие коллеги могли его загрузить и использовать. Здесь я буду проще, я не буду загружать частный сервер Я буду использовать этот класс автоматической настройки.Установите его в локальный репозиторий и используйте в других проектах. Метод установки очень прост: в IntelliJ IDEA щелкните Maven Project справа, затем выберите «Установить» в разделе «Жизненный цикл» и дважды щелкните его следующим образом:

После двойного щелчка Starter будет установлен на нашем локальном складе.Конечно, друзья также могут использовать команду Maven для его установки.

Используйте стартер

Затем давайте создадим новый обычный проект Spring Boot. После успешного создания Spring Boot добавьте наши пользовательские зависимости Starter следующим образом:

<dependency>
    <groupId>org.javaboy</groupId>
    <artifactId>mystarter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

На этом этапе мы представили пользовательский Starter выше, то есть теперь у нас есть экземпляр HelloService по умолчанию в нашем проекте, который можно использовать, и данные об этом экземпляре также можно настроить в application.properties следующим образом:

javaboy.name=牧码小子
javaboy.msg=java

После завершения конфигурации это удобно, я буду использовать его непосредственно в экземпляр Halloserivce в методе теста устройства, код выглядит следующим образом:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UsemystarterApplicationTests {

    @Autowired
    HelloService helloService;
    @Test
    public void contextLoads() {
        System.out.println(helloService.sayHello());
    }
}

Выполните модульный тест и распечатайте журнал следующим образом:

Что ж, мы прошли простой урок по автоматической настройке, не правда ли, это очень просто!

Суммировать

Эта статья в основном подталкивает мелких партнеров к созданию Стартера своими руками, и использовать этот метод, чтобы помочь вам раскрыть тайну Стартера! Если у вас есть какие-либо вопросы, вы можете оставить сообщение для обсуждения.

В случае с этой статьей Song Ge был загружен на GitHub по адресу:GitHub.com/Len VE/Java не….

Обратите внимание на общедоступную учетную запись [Jiangnan A Little Rain], сосредоточьтесь на технологиях с полным стеком, таких как Spring Boot + микросервисы и разделение интерфейса и сервера, делитесь регулярными видеоуроками, отвечайте на Java после того, как уделите внимание, и получайте Сухие товары Java тщательно приготовлены Songge для вас!