Langkah 1: Pendaftaran Definisi Bean (
registerBeanDefinition()
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:
.
BeanDefinitionRegistryPostProcessor
<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>
Langkah 2: Sebelum Instantiation ()
postProcessBeforeInstantiation()
. InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
Apa yang berlaku:
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>
Langkah 3: Kesedaran Nama Bean (
setBeanName()
Apa yang berlaku: sebelum BeanNameAware#setBeanName()
suntikan ketergantungan.
kacang mengiktiraf namanya sendiri. Pemerhatian Utama:
Kaedah ini dipanggil segera selepas pemasangan. Kacang boleh menyimpan namanya untuk kegunaan kemudian (mis., Pembalakan atau manipulasi dalaman). 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
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>
.
Apa yang berlaku:@PostConstruct
(berasaskan anotasi) dan afterPropertiesSet()
(berasaskan antara muka) digunakan untuk pengesahan, persediaan sumber, atau sebarang inisialisasi suntikan pasca-pergantungan. menggunakan kedua -dua postProcessBeforeInitialization()
dan
@PostConstruct
Pemerhatian Utama: InitializingBean#afterPropertiesSet()
. 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.
postProcessAfterInitialization()
BeanPostProcessor#postProcessAfterInitialization()
Pemerhatian Utama: Kaedah ini dipanggil selepas panggilan balik permulaan.
@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>
. 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!