Heim > Java > javaLernprogramm > Spring-: Spring-Boot-Anwendungs-Bean-LIFECYCLE-ZEIT-EXECIERUNGSORTISTUNG-MITTEILUNG MIT MITTRILE

Spring-: Spring-Boot-Anwendungs-Bean-LIFECYCLE-ZEIT-EXECIERUNGSORTISTUNG-MITTEILUNG MIT MITTRILE

Patricia Arquette
Freigeben: 2025-01-29 20:06:13
Original
523 Leute haben es durchsucht

spring-: spring-boot-application-bean-lifecycle-comprehensive-execution-order-with-related-methods

In diesem Dokument werden die umfassende Ausführungsreihenfolge des Spring Boot -Anwendungs ​​-Bean -Lebenszyklus beschrieben, wobei verwandte Methoden in jeder Phase umfasst.

Phase 1: Bootstrapping (JVM & Feder -Boot -Initialisierung)

  1. JVM -Initialisierung: Die Java Virtual Machine (JVM) startet und lädt die Hauptantragsklasse (enthält public static void main(String[] args)).
  2. Springapplication Ausführung: SpringApplication.run() initiiert die Erstellung von Anwendungskontext. (verwandte Methode: SpringApplication.run())
  3. Umgebungskonfiguration: Die Anwendung lädt Einstellungen aus Systemeigenschaften, Umgebungsvariablen, application.properties/yml Dateien und Befehlszeilenargumente. Aktive und Standardprofile werden bestimmt. (verwandte Methoden: ConfigurableEnvironment#setActiveProfiles(), PropertySourcesPropertyResolver#getProperty())
  4. Anwendungstyp Bestimmung: Spring identifiziert den Anwendungstyp (Web oder Nicht-Web). Dies bestimmt den entsprechenden Anwendungskontext: AnnotationConfigServletWebServerApplicationContext (Web) oder AnnotationConfigApplicationContext (Nicht-Web). (verwandte Methode: SpringApplication#determineWebApplicationType())
  5. automatische Konfiguration & SpringFactoriesloader: Spring registriert automatisch Abhängigkeiten, die auf dem Klassenpfad gefunden wurden (über META-INF/spring.factories). (verwandte Methode: SpringFactoriesLoader#loadFactoryNames())
  6. Anwendungslistener: SpringApplicationRunListeners werden ausgelöst, und Ereignisse wie ApplicationStartingEvent und ApplicationEnvironmentPreparedEvent. (verwandte Methoden: SpringApplicationRunListeners#starting(), SpringApplicationRunListeners#environmentPrepared())

Phase 2: Kontextinitialisierung und Bean -Lebenszyklus

  1. applicationContext -Erstellung: Die ApplicationContext wird erstellt und die Bohnen werden mit Annotationen wie @ComponentScan und @Configuration gescannt. (verwandte Methode: AnnotationConfigApplicationContext#register())
  2. Bean Definition Laden: Federverfahren Bean -Definitionen aus Konfigurationsklassen, XML -Dateien oder Komponenten -Scan. HINWEIS: Bean -Instanzen sind noch nicht erstellt. (verwandte Methode: ) BeanDefinitionRegistry#registerBeanDefinition()
  3. Bean -Instanziierung: Beans werden unter Verwendung von Konstruktorinjektion oder Fabrikmethoden instanziiert. (verwandte Methode: ) InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
  4. Lebenszyklus -AWS -Bean -Verarbeitung: Beans, die Lebenszyklus -Schnittstellen (z. B. , BeanNameAware, BeanFactoryAware) implementieren, werden verarbeitet. EnvironmentAware (Verwandte Methoden: , BeanNameAware#setBeanName(), BeanClassLoaderAware#setBeanClassLoader(), BeanFactoryAware#setBeanFactory(), EnvironmentAware#setEnvironment() usw.) EmbeddedValueResolverAware#setEmbeddedValueResolver()
  5. Bedingte Bohnen & Profile: Beans, die mit oder @Conditional gekennzeichnet sind, werden bewertet und basierend auf bestimmten Bedingungen oder aktiven Profilen erstellt. @Profile (verwandte Methoden: , Condition#matches()) ConfigurableEnvironment#getActiveProfiles()
  6. Nachinitialisierung Nachbearbeitung: Methoden werden ausgeführt. BeanPostProcessor#postProcessBeforeInitialization()
  7. benutzerdefinierte Initialisierung: benutzerdefinierte Initialisierungslogik wird mit , @PostConstruct oder dem InitializingBean.afterPropertiesSet() -Matchtribut in init-method Anmerkungen ausgeführt. @Bean (verwandte Methoden: , InitializingBean#afterPropertiesSet()) @PostConstruct
  8. Nach-Initialisierung nach der Verarbeitung: Methoden werden ausgeführt. BeanPostProcessor#postProcessAfterInitialization()

Phase 3: Anwendungsstartabschluss

  1. applicationContext Aktualisierung: Die ApplicationContext wird aktualisiert, wobei die Abhängigkeitsinjektion abgeschlossen wird. Das ContextRefreshedEvent wird abgefeuert. (verwandte Methode: AbstractApplicationContext#refresh())
  2. eingebetteter Webserver Start (falls zutreffend): Wenn es sich um eine Webanwendung handelt, startet und bindet der eingebettete Server (Tomcat, Steg, Steg, Totow) einen Port. ServletContextInitializer und WebApplicationInitializer werden ausgeführt (für Servlet-basierte Apps). (verwandte Methode: ConfigurableWebServerApplicationContext#start())
  3. commandLinerunner & applicationRunner Ausführung: Beans implementieren CommandLineRunner oder ApplicationRunner werden ausgeführt, wobei die Aufgaben nach dem Startup ausgeführt werden. (verwandte Methoden: CommandLineRunner#run(), ApplicationRunner#run())
  4. applicationReadyEvent: Der ApplicationReadyEvent wird abgefeuert, signalisiert, dass die Anwendung vollständig initialisiert und bereit ist, Anforderungen zu verarbeiten. (verwandte Methode: ApplicationListener#onApplicationEvent(ApplicationReadyEvent))

Phase 4: Bean Zerstörung und Anwendung Shutdown

  1. Anmutiges Abschalten: Der Herunterfahren beginnt, gesteuert von spring.lifecycle.timeout-per-shutdown-phase. (verwandte Methode: SpringApplication#setRegisterShutdownHook(true))
  2. Vorzerstörungsverarbeitung: DestructionAwareBeanPostProcessor#postProcessBeforeDestruction() Methoden werden ausgeführt.
  3. benutzerdefinierte Reinigung: benutzerdefinierte Reinigungslogik wird mit DisposableBean.destroy(), @PreDestroy Methoden oder dem destroy-method -Tontribut in @Bean Annotationen durchgeführt. (verwandte Methoden: DisposableBean#destroy(), @PreDestroy)
  4. applicationContext CloseRe: Der ApplicationContext schließt das ContextClosedEvent ab. (verwandte Methode: ConfigurableApplicationContext#close())
  5. benutzerdefinierte Exit -Codes: SpringApplication.exit() kann verwendet werden, um benutzerdefinierte Exit -Codes festzulegen (mit ExitCodeGenerator). (verwandte Methode: SpringApplication#exit())

Phase 5: Erweiterte Überlegungen

  • Lazy Initialisierung (@Lazy): Beans werden nur beim Zugriff erstellt. (verwandte Methode: DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false))
  • Umzugsabhängigkeitshandhabung: Verwenden Sie @Lazy, Setter -Injektion oder @DependsOn, um kreisförmige Abhängigkeiten zu verwalten. (verwandte Methode: AbstractAutowireCapableBeanFactory#doResolveDependency())
  • FactoryBean -Mechanismus: Ermöglicht eine dynamische Bohnenerstellung. (verwandte Methode: FactoryBean#getObject())
  • Spring Boot Actuator (falls aktiviert): bietet Endpunkte für die Überwachung und Verwaltung (/Aktuator/Gesundheit,/Aktuator/Stilldown,/Aktuator/Metriken). (verwandte Methode: HealthIndicator#health())
  • Leistungsoptimierungen: Startzeit mit spring.main.lazy-initialization=true und meldern Müllabfuhr.
  • benutzerdefinierte Anwendungshörer (ApplicationListener): Ermöglicht das Einbinden in Start-/Stilldown -Ereignisse. (verwandte Methode: ApplicationListener#onApplicationEvent())

Zusammenfassung der Ausführungsreihenfolge:

  1. Bootstrapping: JVM → SpringApplication.run() → Auto-Konfiguration → Kontext-Erstellung
  2. Kontextinitialisierung: Bean -Instantiation → Lebenszyklushaken → Abhängigkeitsinjektion
  3. Anwendungsstart: Webserver startet → Läufer → Anwendungsbereit
  4. Herunterfahrenphase: Rückrufe vor der Zerstörung → Aufräumarbeiten → Kontext schließt

Diese detaillierte Aufschlüsselung bietet ein umfassendes Verständnis des Lebenszyklus der Spring Boot Bean und seiner Ausführungsreihenfolge. Das Verständnis dieser Reihenfolge ist entscheidend für das Debugieren, Optimieren und Erweiterung von Feder -Boot -Anwendungen.

Das obige ist der detaillierte Inhalt vonSpring-: Spring-Boot-Anwendungs-Bean-LIFECYCLE-ZEIT-EXECIERUNGSORTISTUNG-MITTEILUNG MIT MITTRILE. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage