Kata pengantar
Wadah IOC Spring sangat kuat, bertanggung jawab atas penciptaan dan pengelolaan kacang musim semi dan fungsi lainnya. Kacang musim semi adalah bagian penting dari seluruh aplikasi Spring. Memahami siklus hidup biji musim semi akan sangat membantu kita memahami seluruh kerangka kerja musim semi.
BeanFactory dan ApplicationContext adalah dua wadah penting musim semi. Yang pertama memberikan dukungan paling dasar untuk injeksi ketergantungan, sementara yang terakhir memperluas fungsinya berdasarkan mewarisi yang pertama, seperti menambahkan fungsi seperti perambatan acara, akses sumber daya dan akses pesan internasional. Artikel ini terutama memperkenalkan siklus hidup kacang dalam dua wadah ApplicationContext dan BeanFactory.
Pertama -tama lihat bagan siklus hidup:
Mari kita bicara tentang siklus hidup sebelum kita membicarakannya:
Spring hanya membantu kita mengelola siklus hidup penuh kacang model singleton. Untuk kacang prototipe, Spring tidak akan lagi mengelola siklus hidup berikutnya setelah dibuat dan diserahkan kepada pengguna.
Metode anotasi
Ada beberapa tahap saat menginisialisasi kacang. Pertama, Anda dapat menggunakan anotasi @postconstruct dan @predestroy untuk menyebutnya dalam tahap penciptaan dan penghancuran kacang:
@ComponentPublic Class AnnotationBean {private final static Logger Logger = loggerFactory.getLogger (annotationBean.class); @PostConstruct public void start () {logger.info ("annotationbean start"); } @Predestroy public void destroy () {logger.info ("AnnotationBean Destroy"); }}Inisialisasi, antarmuka sekali pakai
Anda juga dapat mengimplementasikan dua antarmuka InitializingBean dan DisposableBean, yang juga disebut selama tahap inisialisasi dan penghancuran:
@Servicepublic kelas springlifecycleservice mengimplementasikan inisialisasi, sekali pakai {private final static logger = loggerFactory.getLogger (springlifecycleservice.class); @Override public void afterpropertiesset () melempar Exception {logger.info ("SpringlifecyCleservice Start"); } @Override public void destroy () melempar Exception {logger.info ("SpringlifecyCleservice Destroy"); }}Metode Inisialisasi dan Penghancuran Kustom
Anda juga dapat menyesuaikan metode untuk menelepon selama tahap inisialisasi dan penghancuran:
@ConfigurationPublic kelas LifeCyCleconfig {@bean (initmethod = "start", destrusymethod = "dihancurkan") public springlifecycle create () {springlifecycle springlifecycle = new springlifecycle (); Return Springlifecycle; }} kelas publik springlifecycle {private final static Logger logger = loggerFactory.getLogger (springlifecycle.class); public void start () {logger.info ("Springlifecycle Start"); } public void hancur () {logger.info ("Springlifecycle Destroy"); }}Di atas dikonfigurasi dalam springboot dengan cara ini, dan juga dapat digunakan jika berbasis XML asli:
<bean init-metod = "Mulai" dihancurkan-metod = "hancurkan"> </bean>
untuk mencapai efek yang sama.
Implementasikan *Antarmuka sadar
*Antarmuka yang sadar dapat digunakan untuk mendapatkan beberapa objek di musim semi saat menginisialisasi kacang, seperti mendapatkan konteks musim semi.
@ComponentPublic kelas springlifecycleaware mengimplementasikan applicationContextAware {private final static Logger Logger = loggerFactory.getLogger (springlifecycleaware.class); Private ApplicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ApplicationContext) melempar BeansException {this.applicationContext = ApplicationContext; Logger.info ("Springlifecycleaware Start"); }}Dengan cara ini, metode SetApplicationContext akan dipanggil dalam inisialisasi kacang springlifecycleaware dan objek ApplicationContext dapat diperoleh.
Prosesor Peningkatan BeanpostProcessor
Menerapkan antarmuka BeanPostProcessor. Semua kacang di musim semi akan memanggil dua metode dalam antarmuka saat menginisialisasi, yang dapat digunakan untuk memproses beberapa kacang khusus:
@ComponentPublic Kelas SpringlifecycleProcessor mengimplementasikan BeanPostProcessor {private final static Logger Logger = loggerFactory.getLogger (springlifecycleProcessor.class); / ** * Dipanggil sebelum pra-inisialisasi * @param bean * @param beanname * @return * @throws beansexception */ @override objek publik postprocessBeforeInitialization (Object Bean, String Beanname) Lempar BeansException {if ("annotationBean" .eanEnname (beannecling) ("annotationbean" .eanNeNname (beanneNname) {if ("annotationbean" .eanEnname (beanneNname) {if ("annotationbean" .ean. beanname = {} ", beanname); } return bean; } / ** * inisialisasi kacang pasca-inisialisasi panggilan lengkap * @param bean * @param beanname * @return * @throws beansexception * / @override objek publik postprocessafterinitialization (objek bean, string beanname) melempar beansexception {if ("". Logger.info ("Springlifecycleprocessor end beanname = {}", beanname); } return bean; }}Hasil Pengamatan Setelah Eksekusi:
018-03-21 00: 40: 24.856 [restartedmain] info ccspspringlifecycleProcessor-SpringlifecycleProcessor Mulai beanname = AnnotationBean2018-03-21 00: 40: 24.860 [restartedmain] info ccspring.annot.annotation.annotation -notation -Bean -Bean-nonbeAnping. 00: 40: 24.861 [restartedmain] info ccspspringlifecycleProcessor-springlifecycleProcessor end beanname = annotationbean2018-03-21 00: 40: 24.864 [restartedmain] info ccsaware.springlefecycleaCleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAcleAware 00: 40: 24.867 [restartedmain] info ccspring.springlifecycleservice-springlifecycleservice start2018-03-21 00: 40: 24.887 [restartedmain] info ccspring.springlifecycle-Springlifecycle start 20103: 40 [restartedMain] INFO osbdaOptionalLiveReloadServer - LiveReload server is running on port 357292018-03-21 00:40:25.122 [restartedMain] INFO osjeaAnnotationMBeanExporter - Registering beans for JMX exposure on startup2018-03-21 00:40:25.140 [restartedMain] INFO com.crossoverjie.application-Aplikasi dimulai dalam 2.309 detik (JVM berjalan untuk 3.681) 2018-03-21 00: 40: 25.143 [restartedmain] info com.crossoverjie.Application-Mulai OK! 2018-03-21 00: 40: 25.153 [thread-8] Info oMPA-8] oMPA-8] oMPA-8] oMPA-8.10-03-00: org.springframework.context.annotation.AnnotationConfigapplicationContext@3913Adad: Tanggal Startup [Rabu 21 Maret 00:40:23 CST 2018]; Root of Context Hierarchy2018-03-21 00: 40: 25.155 [Thread-8] Info OsjaannotationMbeanExporter-Unraft JMX DRAURTER ON SURAMIN2018-03-21 00: 40: 25.156 [Thread-8] Info CCSPRINGLIF-SPRINGLIF18 00: 40: 25.156 [thread-8] info ccservice.springlifecycleservice-springlifecycleservice hancur2018-03-21 00: 40: 25.156 [thread-8] info ccspring.annotation.annotationbean-annotationbean hancur ccspring.annotation.
Sampai konteks musim semi dihancurkan, metode hancur kustom dan metode Destroy () yang mengimplementasikan DisposableBean akan dipanggil.
Meringkaskan
Di atas adalah siklus hidup kacang musim semi yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!