Fasa 1: Bootstrapping (JVM & Spring Boot Inisialisasi)
public static void main(String[] args)
SpringApplication.run()
) SpringApplication.run()
application.properties
(kaedah yang berkaitan: yml
, ) ConfigurableEnvironment#setActiveProfiles()
PropertySourcesPropertyResolver#getProperty()
AnnotationConfigServletWebServerApplicationContext
(kaedah berkaitan: AnnotationConfigApplicationContext
) SpringApplication#determineWebApplicationType()
META-INF/spring.factories
) SpringFactoriesLoader#loadFactoryNames()
SpringApplicationRunListeners
. ApplicationStartingEvent
(kaedah yang berkaitan: ApplicationEnvironmentPreparedEvent
, ) SpringApplicationRunListeners#starting()
SpringApplicationRunListeners#environmentPrepared()
Fasa 3: Penyelesaian Permulaan Aplikasi Fasa 4: Pemusnahan Bean & Shutdown Aplikasi
ApplicationContext
dicipta, dan kacang diimbas menggunakan anotasi seperti @ComponentScan
dan @Configuration
. (kaedah berkaitan: AnnotationConfigApplicationContext#register()
) BeanDefinitionRegistry#registerBeanDefinition()
) InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
) BeanNameAware
, BeanFactoryAware
, EnvironmentAware
) diproses. (kaedah yang berkaitan: BeanNameAware#setBeanName()
, BeanClassLoaderAware#setBeanClassLoader()
, BeanFactoryAware#setBeanFactory()
, EnvironmentAware#setEnvironment()
, EmbeddedValueResolverAware#setEmbeddedValueResolver()
, dan lain -lain) @Conditional
atau @Profile
dinilai dan dibuat secara kondusif berdasarkan keadaan tertentu atau profil aktif. (kaedah yang berkaitan: Condition#matches()
, ConfigurableEnvironment#getActiveProfiles()
) BeanPostProcessor#postProcessBeforeInitialization()
Kaedah dilaksanakan. @PostConstruct
, atau InitializingBean.afterPropertiesSet()
dalam init-method
anotasi. @Bean
(kaedah yang berkaitan: , InitializingBean#afterPropertiesSet()
) @PostConstruct
BeanPostProcessor#postProcessAfterInitialization()
ApplicationContext
disegarkan, menyiapkan suntikan ketergantungan. ContextRefreshedEvent
dipecat. (kaedah berkaitan: AbstractApplicationContext#refresh()
) ServletContextInitializer
dan WebApplicationInitializer
dilaksanakan (untuk aplikasi berasaskan servlet). (kaedah berkaitan: ConfigurableWebServerApplicationContext#start()
) CommandLineRunner
atau ApplicationRunner
dilaksanakan, melaksanakan tugas pasca-startup. (kaedah yang berkaitan: CommandLineRunner#run()
, ApplicationRunner#run()
) ApplicationReadyEvent
dipecat, memberi isyarat bahawa permohonan itu dimulakan sepenuhnya dan siap untuk mengendalikan permintaan. (kaedah berkaitan: ApplicationListener#onApplicationEvent(ApplicationReadyEvent)
)
Fasa 5: Pertimbangan Lanjutan spring.lifecycle.timeout-per-shutdown-phase
. (kaedah berkaitan: SpringApplication#setRegisterShutdownHook(true)
) DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
Kaedah dilaksanakan. DisposableBean.destroy()
, @PreDestroy
kaedah, atau atribut destroy-method
dalam @Bean
anotasi. (kaedah yang berkaitan: DisposableBean#destroy()
, @PreDestroy
) ApplicationContext
menutup, menembak ContextClosedEvent
. (kaedah berkaitan: ConfigurableApplicationContext#close()
) SpringApplication.exit()
(kaedah berkaitan: ExitCodeGenerator
) SpringApplication#exit()
@Lazy
Kacang dibuat hanya apabila diakses. DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
@Lazy
untuk menguruskan kebergantungan bulat. @DependsOn
(kaedah berkaitan: ) AbstractAutowireCapableBeanFactory#doResolveDependency()
FactoryBean#getObject()
HealthIndicator#health()
spring.main.lazy-initialization=true
ApplicationListener
membolehkan hooking ke dalam peristiwa permulaan/penutupan. (kaedah berkaitan: ) ApplicationListener#onApplicationEvent()
Ringkasan Perintah Pelaksanaan: bootstrapping:
SpringApplication.run()
Atas ialah kandungan terperinci Spring-: Spring-Boot-Application-Bean-Lifecycle-Comprehensive-Execution-Order-dengan-THE RELED-METHODS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!