Автор: 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
Давайте посмотрим, как выглядит код:
Резюмируем каждый шаг следующим образом:
-
пройти через
SpringFactoriesLoader
нагрузкаMETA-INF/spring.factories
файл, получить и создатьSpringApplicationRunListener
объект -
затем по
SpringApplicationRunListener
выдаватьstarting
Информация -
Создайте параметры и настройте текущую
SpringBoot
приложение будет использоватьEnvironment
-
После завершения еще
SpringApplicationRunListener
выдаватьenvironmentPrepared
Информация -
Создайте
ApplicationContext
-
инициализация
ApplicationContext
, и установитеEnvironment
, конфигурация, связанная с нагрузкой, и т. д. -
Зависит от
SpringApplicationRunListener
выдаватьcontextPrepared
сообщение, которое сообщает приложению Spring Boot использоватьApplicationContext
готов ОК -
разные
beans
загрузить вApplicationContext
, продолжить поSpringApplicationRunListener
выдаватьcontextLoaded
сообщение, которое сообщает приложению Spring Boot использоватьApplicationContext
Заполнено ОК -
refresh ApplicationContext
, последний шаг, чтобы сделать контейнер IoC доступным -
Зависит от
SpringApplicationRunListener
выдаватьstarted
Информация -
перечислить
callRunners(...)
метод, который позволяетApplicationRunner
иCommandLineRunner
класс интерфейсаrun
Метод выполняется для выполнения некоторых дополнительных операций после подготовки контекста приложения Spring. Таким образом, запуск финальной программы завершен. -
Зависит от
SpringApplicationRunListener
выдаватьrunning
сообщение о том, что программа запущена
На этом весь процесс заканчивается.
Личный профиль: Раскованный, любовь к жизни.Культиватор Java (идентификатор общедоступной учетной записи WeChat: Культиватор Java), добро пожаловать, чтобы следовать. Вы можете получить последние учебные пособия по Java, скомпилированные мной. Друзья, которым нравится базовый исходный код, могут прийти и обсудить