Rumah >Java >javaTutorial >Spring-: keseluruhan-spring-bean-lifecycle-From-registration-to-destruction-with-sampel-examples

Spring-: keseluruhan-spring-bean-lifecycle-From-registration-to-destruction-with-sampel-examples

DDD
DDDasal
2025-01-29 20:14:10939semak imbas

spring-: entire-spring-bean-lifecycle-from-registration-to-destruction-with-sample-examples

Panduan ini menyediakan langkah komprehensif kitaran hayat kacang musim bunga, menunjukkan setiap peringkat dengan contoh praktikal. Kami akan meneroka kaedah kitaran hayat Spring secara berurutan, membina pemahaman yang mantap tentang bagaimana Spring menguruskan kacangnya dari pendaftaran ke kemusnahan.

Langkah 1: Pendaftaran Definisi Bean (

) registerBeanDefinition()

kita mulakan dengan mengkaji bagaimana definisi kacang definisi spring

sebelum instantiation, memanfaatkan . BeanDefinitionRegistry

Apa yang Berlaku: Beban Spring dan Daftar Definisi Kacang dari pelbagai sumber: , @ComponentScan Kaedah dalam kelas @Bean, dan konfigurasi XML (jika digunakan). Secara kritis, @Configuration tidak ada kacang yang ditimbulkan pada ketika ini . Spring hanya menyimpan metadata mengenai setiap kacang. Contoh praktikal:

secara manual mendaftarkan kacang dengan menggunakan

. BeanDefinitionRegistryPostProcessor

Takeaway utama:
<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>
Pendaftaran kacang dinamik (mis., Berdasarkan keadaan atau konfigurasi luaran) dicapai melalui kaedah ini. Kacang pada dasarnya adalah cetak biru pada peringkat ini. Gunakan kaedah ini dengan berhati -hati, hanya apabila pendaftaran dinamik benar -benar diperlukan.

Langkah 2: Sebelum Instantiation ()

Seterusnya, kami meneroka postProcessBeforeInstantiation().

InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation() Apa yang berlaku:

Kaedah ini melaksanakan

sebelum instantiasi kacang. Ia membolehkan pengubahsuaian atau penggantian contoh Bean sebelum penciptaan, atau pencegahan instantiasi standard dengan mengembalikan objek proksi atau adat. Contoh praktikal: memintas instantiasi kacang untuk tujuan pembalakan.

Pemerhatian Utama: Kaedah ini berjalan

sebelum
<code class="language-java">@Component
class CustomInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        System.out.println("Before instantiating bean: " + beanName);
        return null; // Allows normal instantiation
    }
}</code>
pembina dipanggil. Ia sangat berharga untuk senario AOP (membuat proksi).

Langkah 3: Kesedaran Nama Bean () selepas instantiation, panggilan musim bunga .

setBeanName() Apa yang berlaku:

Bean menyedari namanya sendiri dalam konteks permohonan. Ini berlaku

sebelum BeanNameAware#setBeanName() suntikan ketergantungan.

Contoh praktikal:

kacang mengiktiraf namanya sendiri. Pemerhatian Utama:

Kaedah ini dipanggil segera selepas pemasangan. Kacang boleh menyimpan namanya untuk kegunaan kemudian (mis., Pembalakan atau manipulasi dalaman).

Langkah 4-12: Kaedah kitaran hayat selanjutnya

Kaedah kitaran hayat yang tinggal (, , , , BeanClassLoaderAware, BeanFactoryAware, EnvironmentAware, dan EmbeddedValueResolverAware) Ikuti corak yang sama: Spring memanggil sesuatu yang spesifik Kaedah setter, menyediakan kacang dengan akses kepada komponen musim bunga yang penting. Ini terperinci dalam dokumen asal dan mengikuti struktur yang sama "Apa yang Berlaku," "Contoh Praktikal," dan "Pemerhatian Utama." Mereka membenarkan akses kepada klasik, kilang kacang, sifat persekitaran, resolver nilai tertanam, pemuat sumber, penerbit acara, sumber mesej, dan konteks aplikasi masing -masing. ResourceLoaderAware Langkah 13: Sebelum Inisialisasi () ApplicationEventPublisherAware MessageSourceAware ApplicationContextAware dipanggil

sebelum

Callbacks inisialisasi (, postProcessBeforeInitialization()).

BeanPostProcessor#postProcessBeforeInitialization() Apa yang berlaku: membolehkan pengubahsuaian sifat kacang atau aplikasi aspek (proksi, pengesahan, pembalakan) sebelum kacang dimulakan sepenuhnya. Contoh praktikal: @PostConstruct mengubah suai kacang sebelum permulaan. InitializingBean#afterPropertiesSet()

Pemerhatian Utama: Kaedah ini dilaksanakan sebelum panggilan balik inisialisasi.

Langkah 14: Callback Initialization (, )

<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>
Spring menyeru panggilan balik permulaan selepas

.

Apa yang berlaku:

@PostConstruct (berasaskan anotasi) dan afterPropertiesSet() (berasaskan antara muka) digunakan untuk pengesahan, persediaan sumber, atau sebarang inisialisasi suntikan pasca-pergantungan.

Contoh praktikal:

menggunakan kedua -dua postProcessBeforeInitialization() dan

.

@PostConstruct Pemerhatian Utama: InitializingBean#afterPropertiesSet()

berjalan sebelum

. Nikmat lebih daripada pelaksanaan melainkan jika diperlukan ketat. @PostConstruct afterPropertiesSet() Langkah 15: Selepas Inisialisasi ()

<code class="language-java">@Component
class CustomInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        System.out.println("Before instantiating bean: " + beanName);
        return null; // Allows normal instantiation
    }
}</code>

melaksanakan selepas panggil balik inisialisasi. @PostConstruct afterPropertiesSet() @PostConstruct Apa yang berlaku: InitializingBean Membenarkan memohon proksi atau melakukan pengubahsuaian akhir selepas inisialisasi kacang penuh.

Contoh praktikal:

memohon pengubahsuaian pasca in-initialisasi. postProcessAfterInitialization()

BeanPostProcessor#postProcessAfterInitialization() Pemerhatian Utama: Kaedah ini dipanggil selepas panggilan balik permulaan.

Langkah 16: Panggil Semula Destruction (@PreDestroy, ) destroy() Akhirnya, panggilan balik pemusnahan dipanggil sebelum penutupan permohonan.

Apa yang Berlaku:

(berasaskan anotasi) dan (berasaskan antara muka) Pastikan pembersihan sumber yang betul. @PreDestroy Contoh praktikal: DisposableBean#destroy() membersihkan sumber.

Pemerhatian Utama:

<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>
berjalan sebelum

. Lebih suka kecuali memerlukan fungsi . @PreDestroy destroy() Gambaran keseluruhan yang komprehensif ini memperincikan kitaran hayat kacang spring, yang membolehkan pemaju menggunakan ciri-ciri pengurusan kitaran hayat Spring dengan berkesan untuk aplikasi yang mantap dan terurus dengan baik. @PreDestroy

Atas ialah kandungan terperinci Spring-: keseluruhan-spring-bean-lifecycle-From-registration-to-destruction-with-sampel-examples. 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