Автор: 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, скомпилированные мной. Друзья, которым нравится базовый исходный код, могут прийти и обсудить