Rumah >Java >javaTutorial >Spring-: Spring-Boot-Application-Bean-Lifecycle-Comprehensive-Execution-Order-dengan-THE RELED-METHODS

Spring-: Spring-Boot-Application-Bean-Lifecycle-Comprehensive-Execution-Order-dengan-THE RELED-METHODS

Patricia Arquette
Patricia Arquetteasal
2025-01-29 20:06:13526semak imbas

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

Dokumen ini memperincikan Perintah Pelaksanaan Komprehensif Permohonan Spring Boot Bean Lifecycle, merangkumi kaedah yang berkaitan pada setiap peringkat.

Fasa 1: Bootstrapping (JVM & Spring Boot Inisialisasi)

  1. Inisialisasi JVM: Mesin maya Java (JVM) bermula dan memuat kelas aplikasi utama (mengandungi ). public static void main(String[] args)
  2. Pelaksanaan SpringApplication: memulakan penciptaan konteks permohonan. (kaedah berkaitan: SpringApplication.run()) SpringApplication.run()
  3. Konfigurasi Alam Sekitar:
  4. Tetapan beban aplikasi dari sifat sistem, pembolehubah persekitaran, / fail, dan argumen baris arahan. Profil aktif dan lalai ditentukan. application.properties (kaedah yang berkaitan: yml, ) ConfigurableEnvironment#setActiveProfiles() PropertySourcesPropertyResolver#getProperty()
  5. Penentuan Jenis Aplikasi:
  6. Spring mengenal pasti jenis aplikasi (web atau bukan web). Ini menentukan konteks aplikasi yang sesuai: (web) atau (bukan web). AnnotationConfigServletWebServerApplicationContext (kaedah berkaitan: AnnotationConfigApplicationContext) SpringApplication#determineWebApplicationType()
  7. Auto-configuration & SpringFactoriesLoader:
  8. Spring secara automatik mendaftarkan kebergantungan yang terdapat di ClassPath (melalui ). (kaedah berkaitan: META-INF/spring.factories) SpringFactoriesLoader#loadFactoryNames()
  9. Pendengar Run Application:
  10. dicetuskan, peristiwa menembak seperti dan SpringApplicationRunListeners. ApplicationStartingEvent (kaedah yang berkaitan: ApplicationEnvironmentPreparedEvent, ) SpringApplicationRunListeners#starting() SpringApplicationRunListeners#environmentPrepared()
Fasa 2: Inisialisasi Konteks & Bean Lifecycle

  1. Penciptaan ApplicationContext: ApplicationContext dicipta, dan kacang diimbas menggunakan anotasi seperti @ComponentScan dan @Configuration. (kaedah berkaitan: AnnotationConfigApplicationContext#register())
  2. Definisi Bean Loading: Proses Spring Definisi kacang dari kelas konfigurasi, fail XML, atau pengimbasan komponen. Nota: Contoh Bean adalah tidak dicipta lagi. (kaedah berkaitan: BeanDefinitionRegistry#registerBeanDefinition())
  3. Bean Instantiation: Kacang instantiated menggunakan suntikan pembina atau kaedah kilang. (kaedah berkaitan: InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation())
  4. Pemprosesan Bean LifeCycle: Kacang yang melaksanakan antara muka kitaran hayat (mis., BeanNameAware, BeanFactoryAware, EnvironmentAware) diproses. (kaedah yang berkaitan: BeanNameAware#setBeanName(), BeanClassLoaderAware#setBeanClassLoader(), BeanFactoryAware#setBeanFactory(), EnvironmentAware#setEnvironment(), EmbeddedValueResolverAware#setEmbeddedValueResolver(), dan lain -lain)
  5. Kacang & profil bersyarat: kacang yang ditandakan dengan @Conditional atau @Profile dinilai dan dibuat secara kondusif berdasarkan keadaan tertentu atau profil aktif. (kaedah yang berkaitan: Condition#matches(), ConfigurableEnvironment#getActiveProfiles())
  6. kaedah pra-in-pemprosesan: BeanPostProcessor#postProcessBeforeInitialization() Kaedah dilaksanakan.
  7. Inisialisasi Custom: Logik inisialisasi tersuai dilaksanakan dengan menggunakan atribut @PostConstruct, atau InitializingBean.afterPropertiesSet() dalam init-method anotasi. @Bean (kaedah yang berkaitan: , InitializingBean#afterPropertiesSet()) @PostConstruct
  8. Kaedah pasca in-initialization: Kaedah dilaksanakan. BeanPostProcessor#postProcessAfterInitialization()

Fasa 3: Penyelesaian Permulaan Aplikasi

  1. ApplicationContext Refresh: ApplicationContext disegarkan, menyiapkan suntikan ketergantungan. ContextRefreshedEvent dipecat. (kaedah berkaitan: AbstractApplicationContext#refresh())
  2. Server web tertanam Mula (jika berkenaan): Jika ia adalah aplikasi web, pelayan tertanam (Tomcat, Jetty, Undertow) bermula dan mengikat ke port. ServletContextInitializer dan WebApplicationInitializer dilaksanakan (untuk aplikasi berasaskan servlet). (kaedah berkaitan: ConfigurableWebServerApplicationContext#start())
  3. CommandLinerunner & ApplicationRunner Execution: Beans Exclibenting CommandLineRunner atau ApplicationRunner dilaksanakan, melaksanakan tugas pasca-startup. (kaedah yang berkaitan: CommandLineRunner#run(), ApplicationRunner#run())
  4. ApplicationreadyEvent: ApplicationReadyEvent dipecat, memberi isyarat bahawa permohonan itu dimulakan sepenuhnya dan siap untuk mengendalikan permintaan. (kaedah berkaitan: ApplicationListener#onApplicationEvent(ApplicationReadyEvent))

Fasa 4: Pemusnahan Bean & Shutdown Aplikasi

  1. Shutdown anggun: Proses penutupan bermula, dikawal oleh spring.lifecycle.timeout-per-shutdown-phase. (kaedah berkaitan: SpringApplication#setRegisterShutdownHook(true))
  2. pemprosesan pra-kemusnahan: DestructionAwareBeanPostProcessor#postProcessBeforeDestruction() Kaedah dilaksanakan.
  3. Pembersihan Custom: Logik pembersihan tersuai dilakukan menggunakan DisposableBean.destroy(), @PreDestroy kaedah, atau atribut destroy-method dalam @Bean anotasi. (kaedah yang berkaitan: DisposableBean#destroy(), @PreDestroy)
  4. Penutupan aplikasiContext: ApplicationContext menutup, menembak ContextClosedEvent. (kaedah berkaitan: ConfigurableApplicationContext#close())
  5. Kod Keluar Khusus: ). SpringApplication.exit() (kaedah berkaitan: ExitCodeGenerator) SpringApplication#exit()
Fasa 5: Pertimbangan Lanjutan

  • Inisialisasi malas (): @Lazy Kacang dibuat hanya apabila diakses. (kaedah berkaitan: ) DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
  • Pengendalian pergantungan bulat: Gunakan , suntikan setter, atau @Lazy untuk menguruskan kebergantungan bulat. @DependsOn (kaedah berkaitan: ) AbstractAutowireCapableBeanFactory#doResolveDependency()
  • Mekanisme FactoryBean: membolehkan penciptaan kacang dinamik. (kaedah berkaitan: ) FactoryBean#getObject()
  • penggerak boot spring (jika didayakan): menyediakan titik akhir untuk pemantauan dan pengurusan (/penggerak/kesihatan,/penggerak/penutupan,/penggerak/metrik). (kaedah berkaitan: ) HealthIndicator#health()
  • Pengoptimuman prestasi: Kurangkan masa permulaan dengan dan koleksi sampah. spring.main.lazy-initialization=true
  • Pendengar Aplikasi Custom (): ApplicationListener membolehkan hooking ke dalam peristiwa permulaan/penutupan. (kaedah berkaitan: ) ApplicationListener#onApplicationEvent()
Ringkasan Perintah Pelaksanaan:

    bootstrapping:
  1. jvm → → konfigurasi auto → penciptaan konteks SpringApplication.run()
  2. Inisialisasi Konteks:
  3. Instansiation Bean → Cangkuk kitaran hayat → Suntikan Ketergantungan
  4. Permulaan aplikasi:
  5. pelayan web bermula → pelari melaksanakan → aplikasi siap
  6. fasa penutupan:
  7. Panggil balik pra-kemusnahan → Pembersihan → Konteks ditutup
  8. Pecahan terperinci ini memberikan pemahaman yang komprehensif mengenai kitaran hayat kacang Spring Boot dan perintah pelaksanaannya. Memahami pesanan ini penting untuk debug, mengoptimumkan, dan memperluaskan aplikasi boot musim bunga.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn