Rumah >Java >javaTutorial >Spring-: Spring-Bean-Lifecycle-Execution-Order

Spring-: Spring-Bean-Lifecycle-Execution-Order

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-29 18:08:15595semak imbas

spring-: spring-bean-lifecycle-execution-order

Artikel ini secara komprehensif menganalisis kitaran hayat kacang spring, yang merangkumi semua antara muka kitaran hayat yang berkaitan dan kaedah yang meliputi antara muka beanfactory untuk mempersembahkan sepenuhnya proses operasi kacang.


I. Spring Bean Life Life Cycle Logic Execution Order (dari Instansiation to Destruction)

(instantiated untuk kemusnahan)

    Memuatkan definisi kacang (pemprosesan metadata)
  1. Spring dari fail konfigurasi

    (@configuration), fail XML atau imbasan komponen (@component)
      baca definisi kacang.
    • Ini adalah langkah pemprosesan metadata , tidak ada contoh yang telah dibuat.
    • Kaedah yang berkaitan:
    • BeanDefinitionRegistry#registerBeanDefinition()
  2. kacang instantiated (dicipta oleh objek)

  1. Buat objek kacang sebenar melalui cara berikut:

    Fungsi konstruktif adalah instantiated

      Kaedah Kilang
      • Kaedah yang berkaitan:
    • Tetapkan nama kacang InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation() ()
  2. Jika kacang melaksanakan
, Spring akan memanggil
kaedah untuk
    memaklumkan nama Bean sendiri
  1. .

    Ini berlaku sebelum sebelum suntikan . BeanNameAware#setBeanName(String name)

    Gunakan kes:
      Jika kacang perlu mengetahui namanya
    • dalam konteks permohonan. BeanNameAware setBeanName()
    • Tetapkan loader kelas kacang
    • () Jika kacang perlu mengakses loader kelasnya , Spring akan memanggil kaedah ini.
    Penggunaan:
  2. Jika kacang
secara dinamik memuatkan kelas
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
pada runtime.
  1. BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)

      set beanfactory
    • ()
    • Spring Injects
    • BeanFactory ke dalam kacang. Gunakan kes: Benarkan kacang
    • Dapatkan kacang lain
    dengan pengaturcaraan.
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>

  1. Tetapkan persekitaran BeanFactoryAware#setBeanFactory(BeanFactory factory) ()

    • Jika kacang perlu mengakses pembolehubah persekitaran dan atribut , kaedah ini akan dipanggil.
    • Gunakan kes: Digunakan untuk mengakses nilai secara dinamik dalam .
<code class="language-java">public class MyBean implements BeanFactoryAware {
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        System.out.println("BeanFactory Set!");
    }
}</code>

    Tetapkan parser nilai tertanam
  1. (

    )

    • dibenarkan kacang menganalisis penempatan penempatan ($ {property})
    • .
    • Penggunaan: Apabila Bean memerlukan secara manual menghuraikan pemegang tempat berguna.

<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>

  1. Tetapkan loader sumber () ResourceLoaderAware#setResourceLoader(ResourceLoader loader)

    hanya terpakai untuk
      ApplicationContext
    • untuk sumber pemuatan dinamik. Gunakan Kes:
    • Memuatkan fail, sumber laluan kelas atau sumber luaran.

Tetapkan Penerbit Acara Permohonan
    ()
  1. Jika Bean memerlukan untuk menerbitkan peristiwa ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher), kaedah ini akan dipanggil.

      Gunakan kes:
    • digunakan untuk acara penyiaran, seperti .
    • ContextRefreshedEvent
    Tetapkan sumber mesej
  2. (
)
  1. Jika Bean memerlukan

    pengantarabangsaan (i18n) untuk menyokong , Spring akan menyuntik MessageSource. MessageSourceAware#setMessageSource(MessageSource source)

    • Tetapkan ApplicationContext
    ()

Jika kacang perlu mengakses
    keseluruhan aplikasi SpringContext
  1. , kaedah ini akan dipanggil.

    Contoh: Benarkan akses dinamik ke ApplicationContextAware#setApplicationContext(ApplicationContext ctx) kacang lain, tetapan alam sekitar, dan lain -lain

    .
    • Tetapkan servertContext ()
    hanya terpakai kepada
  2. Aplikasi Web
, digunakan untuk mengakses
maklumat konteks web
    .
  1. ServletContextAware#setServletContext(ServletContext ctx)

    • Post -processing sebelum inisialisasi ()
    • dibenarkan
    sebelum kacang
  2. sebelum kacang yang diubahsuai
.
  1. BeanPostProcessor#postProcessBeforeInitialization()

    inisialisasi tersuai
  2. custom kaedah

custom
    • InitializingBean afterPropertiesSet() selepas post -treatment posting
    • (
    • ) @PostConstruct
    • Benarkan kacang untuk memulakan @Bean kemudian init-method Ubah suai kacang.
    Contoh:
  1. Digunakan untuk membuat proksi, rekod log atau pengaturcaraan berorientasi muka (AOP)
.
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>

  1. BeanPostProcessor#postProcessAfterInitialization() kacang tersedia

      • Bean mempunyai sepenuhnya dimulakan dan boleh digunakan untuk aplikasi .

2.

Apabila permohonan ditutup, musim bunga akan menjadi elegan dimusnahkan kacang .

rawatan sebelum dimusnahkan

()
  1. membolehkan membersihkan sebelum memusnahkan . DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()

    • kaedah
  2. Jika kacang dilaksanakan,

    akan dipanggil. DisposableBean destroy()

    • DisposableBean custom destroy() kaedah (kaedah pilihan)
lebih moden daripada , dan
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
panggilan sebelum kacang dimusnahkan
    .
  1. @PreDestroy

    • custom DisposableBean (jika ditakrifkan dalam )
  2. Tentukan kaedah alternatif untuk membersihkan logik.
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
  1. , Ringkasan Proses Lengkap (Perintah Akhir) destroy-method @Bean ?

      memuatkan definisi kacang
    • kacang instantiated ()
  2. ()

()

()

()

()

()
  1. ()
  2. () new Bean()
  3. ()
  4. setBeanName() () BeanNameAware
  5. ()
  6. setBeanClassLoader() / BeanClassLoaderAware
  7. () setBeanFactory() BeanFactoryAware kacang tersedia
  8. setEnvironment() EnvironmentAware
  9. ?
  10. setEmbeddedValueResolver() () EmbeddedValueResolverAware
  11. ()
  12. setResourceLoader() ResourceLoaderAware
  13. setApplicationEventPublisher() ApplicationEventPublisherAware
  14. Maklumat lanjut mengenai antara muka dan kaedah, sila lawati:
  15. https://www.php.cn/link/6759d0996526ddc8e27aa550f0b806b1 setMessageSource() MessageSourceAware Saya doakan pengekodan gembira! ?

Atas ialah kandungan terperinci Spring-: Spring-Bean-Lifecycle-Execution-Order. 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