Вы знаете, как запускается проект Spring Boot?

Spring Boot

Автор: CodeSheep ИсточникTickets.WeChat.QQ.com/Yes/-my Q-MES U…

Обзор

существуетJavaВ области back-end разработки знаменитыйSpring BootФреймворк должен был использоваться всеми.

использовалSpring Bootвсе должны знать, что основной класс записи запуска проектаmain()В методе простое предложение

SpringApplication.run( ... );

Путь к запуску и эксплуатации проекта был открыт.

Итак, в этой статье мы рассмотрим этоSpringApplicationа такжеrun()Что же это за метод, и какие тайны за ним скрываются?

SpringApplication

SpringApplicationЭтот класс следует рассматривать как «инновационный» продукт самой среды Spring Boot, потому что этот класс не существует в исходной среде Spring.SpringApplicationОн инкапсулирует набор процессов запуска приложения Spring, но он полностью прозрачен для пользователей, поэтому мы чувствуем себя простыми и легкими, когда начинаем работать с Spring Boot.

Обычно по умолчаниюSpringApplicationПроцесс выполнения уже может удовлетворить большинство потребностей, но если пользователь захочет вмешаться в этот процесс, он может пройтиSpringApplicationоткрылось где-то в процессеточка расширенияДля завершения расширения процесса типичная схема расширения заключается в использованииsetметод.

Давайте возьмем каштан, разберем и напишем класс запуска приложения Spring Boot, с которым мы знакомы каждый день:

@SpringBootApplicationpublic class CodeSheepApplication { public static void main( String[] args ) {  // SpringApplication.run( CodeSheepApplication.class args ); // 这是传统Spring Boot应用的启动,一行代码搞定,内部默认做了很多事  SpringApplication app = new SpringApplication( CodeSheepApplication.class );  app.setXXX( ... ); // 用户自定的扩展在此 !!!  app.run( args ); }}

После такой разборки мы обнаружили, что нам также нужно построить сначалаSpringApplicationобъект класса, затем вызовите объектrun()метод.

Тогда давай поговоримSpringApplicationпроцесс строительства и егоrun()Процесс метода, если вы это понимаете, то пойметеSpring BootКак работает приложение.

Инициализация экземпляра SpringApplication

Или сначала посмотрите на код:

На рисунке отмечены четыре ключевых шага, которые поясняются следующим образом:

  • Сделайте вывод о типе приложения: создайте один из трех типов: REACTIVE application, SERVLET application и NONE.

использоватьSpringFactoriesLoaderнайти и загрузитьclasspath下META-INF/spring.factoriesВсе что есть в файлеApplicationContextInitializer

использоватьSpringFactoriesLoaderнайти и загрузитьclasspath下META-INF/spring.factoriesВсе что есть в файлеApplicationListener

сделать вывод и установитьmainкласс определения метода

Изучение метода run() SpringApplication

Давайте посмотрим, как выглядит код:

Резюмируем каждый шаг следующим образом:

  1. пройти черезSpringFactoriesLoaderнагрузкаMETA-INF/spring.factoriesфайл, получить и создатьSpringApplicationRunListenerобъект

  2. затем поSpringApplicationRunListenerвыдаватьstartingИнформация

  3. Создайте параметры и настройте текущуюSpringBootприложение будет использоватьEnvironment

  4. После завершения ещеSpringApplicationRunListenerвыдаватьenvironmentPreparedИнформация

  5. СоздайтеApplicationContext

  6. инициализацияApplicationContext, и установитеEnvironment, конфигурация, связанная с нагрузкой, и т. д.

  7. Зависит отSpringApplicationRunListenerвыдаватьcontextPreparedсообщение, которое сообщает приложению Spring Boot использоватьApplicationContextготов ОК

  8. разныеbeansзагрузить вApplicationContext, продолжить поSpringApplicationRunListenerвыдаватьcontextLoadedсообщение, которое сообщает приложению Spring Boot использоватьApplicationContextЗаполнено ОК

  9. refresh ApplicationContext, последний шаг, чтобы сделать контейнер IoC доступным

  10. Зависит отSpringApplicationRunListenerвыдаватьstartedИнформация

  11. перечислитьcallRunners(...)метод, который позволяетApplicationRunnerиCommandLineRunnerкласс интерфейсаrunМетод выполняется для выполнения некоторых дополнительных операций после подготовки контекста приложения Spring. Таким образом, запуск финальной программы завершен.

  12. Зависит отSpringApplicationRunListenerвыдаватьrunningсообщение о том, что программа запущена

На этом весь процесс заканчивается.

Личный профиль: Раскованный, любовь к жизни.Культиватор Java (идентификатор общедоступной учетной записи WeChat: Культиватор Java), добро пожаловать, чтобы следовать. Вы можете получить последние учебные пособия по Java, скомпилированные мной. Друзья, которым нравится базовый исходный код, могут прийти и обсудить