Ce document détaille l'ordre d'exécution complet du cycle de vie du bean d'application Spring Boot, englobant les méthodes connexes à chaque étape.
Phase 1: bootstrap (JVM & Spring Boot Initialisation)
public static void main(String[] args)
). SpringApplication.run()
initie la création de contexte d'application. (Méthode associée: SpringApplication.run()
) application.properties
/ yml
et les arguments en ligne de commande. Les profils actifs et par défaut sont déterminés. (Méthodes associées: ConfigurableEnvironment#setActiveProfiles()
, PropertySourcesPropertyResolver#getProperty()
) AnnotationConfigServletWebServerApplicationContext
(web) ou AnnotationConfigApplicationContext
(non Web). (Méthode associée: SpringApplication#determineWebApplicationType()
) META-INF/spring.factories
). (Méthode associée: SpringFactoriesLoader#loadFactoryNames()
) SpringApplicationRunListeners
Sont déclenchés, tirant des événements comme ApplicationStartingEvent
et ApplicationEnvironmentPreparedEvent
. (Méthodes associées: SpringApplicationRunListeners#starting()
, SpringApplicationRunListeners#environmentPrepared()
) Phase 2: Initialisation du contexte et cycle de vie des bean
ApplicationContext
est créé, et les beans sont analysés à l'aide d'annotations comme @ComponentScan
et @Configuration
. (Méthode associée: AnnotationConfigApplicationContext#register()
) BeanDefinitionRegistry#registerBeanDefinition()
) InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
) BeanNameAware
, BeanFactoryAware
, EnvironmentAware
) sont traités. (Méthodes associées: BeanNameAware#setBeanName()
, BeanClassLoaderAware#setBeanClassLoader()
, BeanFactoryAware#setBeanFactory()
, EnvironmentAware#setEnvironment()
, EmbeddedValueResolverAware#setEmbeddedValueResolver()
, etc.) @Conditional
ou @Profile
sont évalués et créés conditionnellement sur la base de conditions spécifiées ou de profils actifs. (Méthodes associées: Condition#matches()
, ConfigurableEnvironment#getActiveProfiles()
) BeanPostProcessor#postProcessBeforeInitialization()
Les méthodes sont exécutées. @PostConstruct
, InitializingBean.afterPropertiesSet()
ou de l'attribut init-method
dans les annotations @Bean
. (Méthodes associées: InitializingBean#afterPropertiesSet()
, @PostConstruct
) BeanPostProcessor#postProcessAfterInitialization()
Les méthodes sont exécutées. Phase 3: Achèvement du démarrage de l'application
ApplicationContext
est rafraîchi, terminant l'injection de dépendance. Le ContextRefreshedEvent
est licencié. (Méthode associée: AbstractApplicationContext#refresh()
) ServletContextInitializer
et WebApplicationInitializer
sont exécutés (pour les applications basées sur le servlet). (Méthode associée: ConfigurableWebServerApplicationContext#start()
) CommandLineRunner
ou ApplicationRunner
sont exécutés, effectuant des tâches post-startup. (Méthodes associées: CommandLineRunner#run()
, ApplicationRunner#run()
) ApplicationReadyEvent
est licencié, signalant que l'application est entièrement initialisée et prête à gérer les demandes. (Méthode associée: ApplicationListener#onApplicationEvent(ApplicationReadyEvent)
) Phase 4: Destruction des haricots et arrêt des applications
spring.lifecycle.timeout-per-shutdown-phase
. (Méthode associée: SpringApplication#setRegisterShutdownHook(true)
) DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
Les méthodes sont exécutées. DisposableBean.destroy()
, @PreDestroy
, ou l'attribut destroy-method
dans les annotations @Bean
. (Méthodes associées: DisposableBean#destroy()
, @PreDestroy
) ApplicationContext
ferme, tirant le ContextClosedEvent
. (Méthode associée: ConfigurableApplicationContext#close()
) SpringApplication.exit()
peuvent être utilisés pour définir les codes de sortie personnalisés (en utilisant ExitCodeGenerator
). (Méthode associée: SpringApplication#exit()
) Phase 5: Considérations avancées
@Lazy
): Les haricots sont créés uniquement lorsqu'ils sont accessibles. (Méthode associée: DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
) @Lazy
, l'injection de setter ou @DependsOn
pour gérer les dépendances circulaires. (Méthode associée: AbstractAutowireCapableBeanFactory#doResolveDependency()
) FactoryBean#getObject()
) HealthIndicator#health()
) spring.main.lazy-initialization=true
et réglez la collecte des ordures. ApplicationListener
): Permet de s'accrocher aux événements de démarrage / arrêt. (Méthode associée: ApplicationListener#onApplicationEvent()
) Résumé de l'ordre d'exécution:
SpringApplication.run()
→ Auto-configuration → Création de contexte Cette ventilation détaillée fournit une compréhension complète du cycle de vie du bean de démarrage de Spring et de son ordre d'exécution. Comprendre cet ordre est crucial pour le débogage, l'optimisation et l'extension des applications de démarrage de ressort.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!