国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Bean的生命周期 -- Spring入門(三)

這篇具有很好參考價值的文章主要介紹了Spring Bean的生命周期 -- Spring入門(三)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

為了鞏固所學(xué)的知識,作者嘗試著開始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當(dāng)然,如果能幫到一些萌新進(jìn)行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯誤,歡迎讀者朋友們批評指正。
(博客的參考源碼以及可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評論區(qū)向我提出)

發(fā)現(xiàn)寶藏

前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家?!緦毑厝肟凇?。

1. 理解bean的生命周期

  1. 生命周期: 從創(chuàng)建到消亡的完整過程;bean生命周期 : bean從創(chuàng)建到銷毀的整體過程; bean生命周期控制:在bean創(chuàng)建后到銷毀前做一些事情
  2. 理解 Spring bean 的生命周期很容易。當(dāng)一個 bean 被實例化時,它可能需要執(zhí)行一些初始化使它轉(zhuǎn)換成可用狀態(tài)。同樣,當(dāng) bean 不再需要,并且從容器中移除時,可能需要做一些清除工作
  3. 盡管還有一些在 Bean 實例化和銷毀之間發(fā)生的活動,有兩個重要的生命周期回調(diào)方法,它們在 bean 的初始化銷毀的時候是必需的
  4. 為了定義安裝和拆卸一個 bean,我們只要聲明帶有 init-method 和/或 destroy-method 參數(shù)的 。init-method 屬性指定一個方法,在實例化 bean 時,立即調(diào)用該方法。同樣,destroy-method 指定一個方法,只有從容器中移除 bean 之后,才能調(diào)用該方法
  5. Bean的生命周期可以表達(dá)為:Bean的定義——Bean的初始化——Bean的使用——Bean的銷毀

2. Bean 生命周期的執(zhí)行過程

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

  1. 根據(jù)配置情況調(diào)用 Bean 構(gòu)造方法或工廠方法實例化 Bean
  2. 利用依賴注入完成 Bean 中所有屬性值的配置注入
  3. 如果 Bean 實現(xiàn)了 BeanNameAware 接口,則 Spring 調(diào)用 Bean 的 setBeanName() 方法傳入當(dāng)前 Bean 的 id 值
  4. 如果 Bean 實現(xiàn)了 BeanFactoryAware 接口,則 Spring 調(diào)用 setBeanFactory() 方法傳入當(dāng)前工廠實例的引用
  5. 如果 Bean 實現(xiàn)了 ApplicationContextAware 接口,則 Spring 調(diào)用 setApplicationContext() 方法傳入當(dāng)前 ApplicationContext 實例的引用
  6. 如果 BeanPostProcessor 和 Bean 關(guān)聯(lián),則 Spring 將調(diào)用該接口的預(yù)初始化方法 postProcessBeforeInitialzation() 對 Bean 進(jìn)行加工操作,此處非常重要,Spring 的 AOP 就是利用它實現(xiàn)的
  7. 如果 Bean 實現(xiàn)了 InitializingBean 接口,則 Spring 將調(diào)用 afterPropertiesSet() 方法
  8. 如果在配置文件中通過 init-method 屬性指定了初始化方法,則調(diào)用該初始化方法
  9. 如果 BeanPostProcessor 和 Bean 關(guān)聯(lián),則 Spring 將調(diào)用該接口的初始化方法 postProcessAfterInitialization()。此時,Bean 已經(jīng)可以被應(yīng)用系統(tǒng)使用了
  10. 如果在 中指定了該 Bean 的作用范圍為 scope=“singleton”,則將該 Bean 放入 Spring IoC 的緩存池中,將觸發(fā) Spring 對該 Bean 的生命周期管理;如果在 中指定了該 Bean 的作用范圍為 scope=“prototype”,則將該 Bean 交給調(diào)用者,調(diào)用者管理該 Bean 的生命周期,Spring 不再管理該 Bean
  11. 如果 Bean 實現(xiàn)了 DisposableBean 接口,則 Spring 會調(diào)用 destory() 方法將 Spring 中的 Bean 銷毀;如果在配置文件中通過 destory-method 屬性指定了 Bean 的銷毀方法,則 Spring 將調(diào)用該方法對 Bean 進(jìn)行銷毀
  12. Spring 為 Bean 提供了細(xì)致全面的生命周期過程,通過實現(xiàn)特定的接口或 的屬性設(shè)置,都可以對 Bean 的生命周期過程產(chǎn)生影響。雖然可以隨意配置 的屬性,但是建議不要過多地使用 Bean 實現(xiàn)接口,因為這樣會導(dǎo)致代碼和 Spring 的聚合過于緊密

3. Bean生命周期控制入門案例

1. 編寫代碼(IOC 和 DI入門案例的代碼,模塊名為respr_ioc)

  • 在BookDaoImpl實現(xiàn)類中定義代表創(chuàng)建bena初始化和銷毀的方法
package org.example.dao.impl;

import org.example.dao.BookDao;

public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
    //表示bean初始化對應(yīng)的操作
    public void init(){
        System.out.println("init...");
    }
    //表示bean銷毀前對應(yīng)的操作
    public void destory(){
        System.out.println("destory...");
    }
}

2. 在applicationContext.xml文件中配置BookDao bean 的 初始化方法 int-method 和銷毀方法 destory-method

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

3. 將BookService的代碼注釋掉,運行模擬測試類,觀察BookDao bean的創(chuàng)建和銷毀過程

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端
4. 觀察運行結(jié)果

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

5. 簡要分析

  1. 我們從運行結(jié)果可以看到bean初始化成功了,但是并沒有進(jìn)行銷毀工作,原因是java虛擬機(java在虛擬機運行)在執(zhí)行玩程序退出時并沒有做銷毀操作,我們需要自己添加關(guān)閉語句,ctx.close()。
  2. 但是ApplicationContext接口中并沒有這個方法,而它的實現(xiàn)類中有,所以我們要用它的實現(xiàn)類ClassPathXmlApplicationContext來調(diào)用這個方法

4. 關(guān)閉IOC容器的兩種方式

1. 關(guān)閉ioc容器的代碼及運行結(jié)果如下

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

2. 關(guān)閉ioc容器的第二種方式:關(guān)閉鉤子(概念、代碼及運行結(jié)果如下)

  1. 在Java程序退出時——尤其是非正常退出時,我們可能需要先執(zhí)行一些善后工作,如關(guān)閉線程池、連接池、文件句柄等。
  2. 如何保證善后工作的代碼能夠被執(zhí)行到呢?Java為用戶提供了關(guān)閉鉤子(shutdown hook)registerShutdownHook()方法來注冊關(guān)閉鉤子

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

3. 兩種關(guān)閉ioc容器的簡要分析

關(guān)閉鉤子函數(shù)代碼在程序中的位置要求沒有close()方法那么苛刻,如果將其挪到bookDao.save()方法的下面也能用,close()方法比較暴力

5. 通過繼承接口綁定生命周期方法

1. 綁定銷毀方法和初始化方法的改進(jìn)–繼承接口(以BookServiceImpl為例)

  1. 實現(xiàn)InitializingBean, DisposableBean接口
  2. 重寫 destroy(銷毀) 和 afterPropertiesSet(初始化) 方法
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }

    public void destroy() throws Exception {
        System.out.println("service destroy");
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("service init");
    }
}

2. 模擬測試類Main2運行結(jié)果

盡管在模擬測試類Main2并沒有調(diào)用BookService 的bean,但是在核心配置文件中定義了BookService 的 bean,該創(chuàng)建bean的時候就創(chuàng)建,該初始化就初始化,該銷毀就銷毀

Spring Bean的生命周期 -- Spring入門(三),Spring入門,spring,java,后端

總結(jié)

歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關(guān)注,點贊,收藏支持一下。
(博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評論區(qū)向我提出)文章來源地址http://www.zghlxwxcb.cn/news/detail-618517.html

到了這里,關(guān)于Spring Bean的生命周期 -- Spring入門(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Spring】Spring的Bean的生命周期

    【Spring】Spring的Bean的生命周期

    作者簡介:大家好,我是五度魚,一個普通的Java領(lǐng)域博主,不停輸出Java技術(shù)博客和干貨 。 座右銘:鍥而不舍,金石可鏤 。 個人主頁:五度魚學(xué)Java的主頁 在 Java 中, Bean 是一個重要的概念,它代表了應(yīng)用程序中的一個對象。在開發(fā)中,我們經(jīng)常使用 Bean 來管理對象的生命

    2024年01月16日
    瀏覽(35)
  • Spring整理-Spring Bean的生命周期

    Spring?Bean的生命周期涉及多個階段,從Bean的定義到其銷毀。在這個過程中,Spring容器負(fù)責(zé)創(chuàng)建、初始化、使用和最終銷毀Bean。了解這個生命周期有助于更好地管理Bean的行為和資源使用。 實例化(Instantiation): 容器首先創(chuàng)建Bean的實例。 填充屬性(Populate?Properties): 容器

    2024年01月21日
    瀏覽(31)
  • 【Spring】Bean的作用域與生命周期詳情:請簡述Spring的執(zhí)行流程并分析Bean的生命周期?

    【Spring】Bean的作用域與生命周期詳情:請簡述Spring的執(zhí)行流程并分析Bean的生命周期?

    ?我們都知道,Spring框架為開發(fā)人員提供了很多便捷,這使得開發(fā)人員能夠更加專注于應(yīng)用程序的核心業(yè)務(wù)邏輯,而不需要花費大量時間和精力在技術(shù)細(xì)節(jié)上。作為一個包含眾多工具方法的IoC容器,存取JavaBean是其極為重要的一個環(huán)節(jié)。本文就對Spring中的Bean的作用域和生命周

    2024年02月12日
    瀏覽(27)
  • Spring Bean的生命周期

    Spring Bean的生命周期

    Bean生命周期的整個執(zhí)行過程描述如下: 1、根據(jù)配置情況調(diào)用Bean構(gòu)造方法或工廠方法實例化 Bean。 2、利用依賴注入完成Bean中所有屬性值的配置注入。 3、如果Bean 實現(xiàn)了BeanNameAware 接口,則 Spring調(diào)用Bean的setBeanName()方法傳入當(dāng)前Bean的id值。 4、如果Bean實現(xiàn)了BeanFactoryAware 接口

    2023年04月22日
    瀏覽(35)
  • Spring -- Bean的生命周期

    Spring -- Bean的生命周期

    Spring容器在進(jìn)行實例化時,會將xml配置的bean的信息封裝成一個BeanDefinition對象,Spring根據(jù)BeanDefinition來創(chuàng)建Bean對象,里面有很多的屬性用來描述Bean? ?BeanDefinition 中幾個重要方法如下 beanClassName:bean 的類名 initMethodName:初始化方法名稱 properryValues:bean 的屬性值 scope:作用域

    2024年02月15日
    瀏覽(35)
  • 【Spring】Spring之Bean生命周期源碼解析

    什么是bean的生命周期 是指bean在spring中是如何生成,如何銷毀的; spring創(chuàng)建對象的過程,就是IOC(控制反轉(zhuǎn))的過程; JFR Java Flight Record,java飛行記錄,類似于飛機的黑匣子,是JVM內(nèi)置的基于事件的JDK監(jiān)控記錄框架,主要用于問題定位和持續(xù)監(jiān)控; 入口代碼: Spring啟動的時

    2024年02月15日
    瀏覽(22)
  • 詳解Spring Bean的生命周期

    詳解Spring Bean的生命周期

    Spring Bean的生命周期包括以下階段: 1. 實例化Bean 對于BeanFactory容器,當(dāng)客戶向容器請求一個尚未初始化的bean時,或初始化bean的時候需要注入另一個尚未初始化的依賴時,容器就會調(diào)用createBean進(jìn)行實例化。 對于ApplicationContext容器,當(dāng)容器啟動結(jié)束后,便實例化所有的bean。

    2024年02月14日
    瀏覽(24)
  • Spring Bean的生命周期解讀

    Spring Bean的生命周期解讀

    目錄 ? 1. Spring IOC容器 1.1 Spring IOC 容器的設(shè)計 1.1.1 BeanFactory 1.1.2 ApplicationContext 1.2 Spring Bean的生命周期 1.2.1 BeanDefinition 1.2.2 InstantiationAwareBeanPostProcessor和BeanPostProcessor 1.2.3 測試生命周期 ? Spring IOC 容器的設(shè)計主要是基于 BeanFactory 和 ApplicationContex t兩個接口,其中ApplicationConte

    2024年02月11日
    瀏覽(24)
  • Spring(11) Bean的生命周期

    Spring(11) Bean的生命周期

    首先,為什么要學(xué)習(xí) Spring 中 Bean 的生命周期呢? 雖然不了解 Bean 的生命周期,并不影響日常工作中的開發(fā)。但是如果我們了解了 Bean 的生命周期,可以幫助我們更好地掌握 Spring 框架,并且能夠讓我們更好地去理解 Spring 容器是如何管理和創(chuàng)建 Bean 示例的。如果以后遇到 B

    2024年02月14日
    瀏覽(18)
  • Spring源碼:Bean生命周期(五)

    在上一篇文章中,我們深入探討了 Spring 框架中 Bean 的實例化過程,該過程包括從 Bean 定義中加載當(dāng)前類、尋找所有實現(xiàn)了 InstantiationAwareBeanPostProcessor 接口的類并調(diào)用實例化前的方法、進(jìn)行實例化、調(diào)用 applyMergedBeanDefinitionPostProcessors 方法等多個步驟,最終生成了一個真正的

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包