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)
public static void main(String[] args)
). SpringApplication.run()
initiiert die Erstellung von Anwendungskontext. (verwandte Methode: SpringApplication.run()
) application.properties
/yml
Dateien und Befehlszeilenargumente. Aktive und Standardprofile werden bestimmt. (verwandte Methoden: ConfigurableEnvironment#setActiveProfiles()
, PropertySourcesPropertyResolver#getProperty()
) AnnotationConfigServletWebServerApplicationContext
(Web) oder AnnotationConfigApplicationContext
(Nicht-Web). (verwandte Methode: SpringApplication#determineWebApplicationType()
) META-INF/spring.factories
). (verwandte Methode: SpringFactoriesLoader#loadFactoryNames()
) SpringApplicationRunListeners
werden ausgelöst, und Ereignisse wie ApplicationStartingEvent
und ApplicationEnvironmentPreparedEvent
. (verwandte Methoden: SpringApplicationRunListeners#starting()
, SpringApplicationRunListeners#environmentPrepared()
) Phase 2: Kontextinitialisierung und Bean -Lebenszyklus
ApplicationContext
wird erstellt und die Bohnen werden mit Annotationen wie @ComponentScan
und @Configuration
gescannt. (verwandte Methode: AnnotationConfigApplicationContext#register()
) BeanDefinitionRegistry#registerBeanDefinition()
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
BeanNameAware
, BeanFactoryAware
) implementieren, werden verarbeitet. EnvironmentAware
(Verwandte Methoden: , BeanNameAware#setBeanName()
, BeanClassLoaderAware#setBeanClassLoader()
, BeanFactoryAware#setBeanFactory()
, EnvironmentAware#setEnvironment()
usw.) EmbeddedValueResolverAware#setEmbeddedValueResolver()
@Conditional
gekennzeichnet sind, werden bewertet und basierend auf bestimmten Bedingungen oder aktiven Profilen erstellt. @Profile
(verwandte Methoden: , Condition#matches()
) ConfigurableEnvironment#getActiveProfiles()
BeanPostProcessor#postProcessBeforeInitialization()
@PostConstruct
oder dem InitializingBean.afterPropertiesSet()
-Matchtribut in init-method
Anmerkungen ausgeführt. @Bean
(verwandte Methoden: , InitializingBean#afterPropertiesSet()
) @PostConstruct
BeanPostProcessor#postProcessAfterInitialization()
Phase 3: Anwendungsstartabschluss
ApplicationContext
wird aktualisiert, wobei die Abhängigkeitsinjektion abgeschlossen wird. Das ContextRefreshedEvent
wird abgefeuert. (verwandte Methode: AbstractApplicationContext#refresh()
) ServletContextInitializer
und WebApplicationInitializer
werden ausgeführt (für Servlet-basierte Apps). (verwandte Methode: ConfigurableWebServerApplicationContext#start()
) CommandLineRunner
oder ApplicationRunner
werden ausgeführt, wobei die Aufgaben nach dem Startup ausgeführt werden. (verwandte Methoden: CommandLineRunner#run()
, ApplicationRunner#run()
) 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
spring.lifecycle.timeout-per-shutdown-phase
. (verwandte Methode: SpringApplication#setRegisterShutdownHook(true)
) DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
Methoden werden ausgeführt. DisposableBean.destroy()
, @PreDestroy
Methoden oder dem destroy-method
-Tontribut in @Bean
Annotationen durchgeführt. (verwandte Methoden: DisposableBean#destroy()
, @PreDestroy
) ApplicationContext
schließt das ContextClosedEvent
ab. (verwandte Methode: ConfigurableApplicationContext#close()
) SpringApplication.exit()
kann verwendet werden, um benutzerdefinierte Exit -Codes festzulegen (mit ExitCodeGenerator
). (verwandte Methode: SpringApplication#exit()
) Phase 5: Erweiterte Überlegungen
@Lazy
): Beans werden nur beim Zugriff erstellt. (verwandte Methode: DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
) @Lazy
, Setter -Injektion oder @DependsOn
, um kreisförmige Abhängigkeiten zu verwalten. (verwandte Methode: AbstractAutowireCapableBeanFactory#doResolveDependency()
) FactoryBean#getObject()
) HealthIndicator#health()
) spring.main.lazy-initialization=true
und meldern Müllabfuhr. ApplicationListener
): Ermöglicht das Einbinden in Start-/Stilldown -Ereignisse. (verwandte Methode: ApplicationListener#onApplicationEvent()
) Zusammenfassung der Ausführungsreihenfolge:
SpringApplication.run()
→ Auto-Konfiguration → Kontext-Erstellung 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!