最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring中Bean的作用域與生命周期

 更新時(shí)間:2021年12月21日 14:43:16   作者:智商三歲半i  
Spring作為當(dāng)前Java最流行、最強(qiáng)大的輕量級框架,受到了程序員的熱烈歡迎。準(zhǔn)確的了解Spring?Bean的作用域與生命周期是非常必要的。這篇文章將問你詳解一下Bean的作用域與生命周期,需要的可以參考一下

一、Bean的作用域

通過Spring容器創(chuàng)建一個(gè)Bean的實(shí)例時(shí),不僅可以完成Bean的實(shí)例化,還可以使用Bean的scope屬性為bean設(shè)置作用域。

語法格式:<bean id="別名" scope="作用域" class="對應(yīng)實(shí)現(xiàn)類">

作用域的種類:(sing)

singleton和prototype區(qū)別:(該兩種比較常用)

① singleton單實(shí)例,prototype多實(shí)例

② 設(shè)置scope值是singleton時(shí)候,加載spring配置文件時(shí)候就會創(chuàng)建單實(shí)例對象

設(shè)置scope值是prototype時(shí)候,在加載spring配置文件時(shí)候暫時(shí)不會創(chuàng)建對象,在調(diào)用getBean方法時(shí)候才創(chuàng)建多實(shí)例對象

singleton作用域:

//Cat.java
public class Cat {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
}

配置文件beans5.xml

<bean id="cat" scope="singleton" class="com.jd.dao.Cat">
    <property name="name" value="大橘"></property>
</bean>

測試:

//Bean的作用域測試方法
@Test
public void catTest(){
    //1.初始化Spring容器,加載配置文件
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans5.xml");
    //2.通過Spring容器獲取Bean的實(shí)例
    Cat cat1 = (Cat) applicationContext.getBean("cat");
    Cat cat2 = (Cat) applicationContext.getBean("cat");
    //3.輸出獲取的實(shí)例
    System.out.println(cat1);
    System.out.println(cat2);
}

prototype作用域:

將配置文件beans5.xml中的scope屬性改為prototype,再次運(yùn)行測試:

<bean id="cat" scope="prototype" class="com.jd.dao.Cat">
    <property name="name" value="大橘"></property>
</bean>

3測試:

二、Bean的生命周期

Bean從創(chuàng)建到銷毀稱為Bean的生命周期,大體上Bean的生命周期共有七步:

(1)通過無參構(gòu)造器創(chuàng)建bean實(shí)例

(2)調(diào)用屬性setter方法為bean的屬性設(shè)置值

(3)把bean實(shí)例傳遞bean后置處理器的方法postProcessBeforeInitialization

(4)調(diào)用bean的初始化的方法(需要配置初始化的方法)

(5)把bean實(shí)例傳遞bean后置處理器的方法postProcessAfterInitialization

(6)獲取使用已經(jīng)創(chuàng)建的bean

(7)當(dāng)容器關(guān)閉時(shí)候,調(diào)用bean的銷毀的方法(需要配置銷毀的方法)

注意:

① 初始化方法、銷毀方法都需要在Bean中作為屬性手動配置;

② 只有singleton作用域的Bean才會執(zhí)行銷毀方法;

使用代碼演示Bean的生命周期

(1)普通Java Bean:Cat.java

public class Cat {
    private String name;
    public void setName(String name) {
        this.name = name;
        System.out.println("第二步:調(diào)用屬性setter方法為bean的屬性設(shè)置值");
    }
    public Cat(){
        System.out.println("第一步;通過無參構(gòu)造器創(chuàng)建bean實(shí)例");
    }
    //初始化方法(在配置文件中配置實(shí)現(xiàn)調(diào)用)
    public void initMethod(){
        System.out.println("第四步:調(diào)用bean的初始化的方法");
    }
    //銷毀方法(在配置文件中配置實(shí)現(xiàn)調(diào)用)
    public void destroyMethod(){
        System.out.println("第七步:當(dāng)容器關(guān)閉時(shí)候,調(diào)用bean的銷毀的方法");
    }
}

(2)myBeanPostProcessor實(shí)現(xiàn)BeanPostProcessor接口,實(shí)現(xiàn)后置處理器:myBeanPostProcessor.java

(spring中的AOP就是通過實(shí)現(xiàn)BeanPostProcessor接口實(shí)現(xiàn)的)

//myBeanPostProcessor實(shí)現(xiàn)BeanPostProcessor接口,實(shí)現(xiàn)后置處理器
public class myBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("第三步:把bean實(shí)例傳遞bean后置處理器的方法");
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("第五步:把bean實(shí)例傳遞bean后置處理器的方法");
        return bean;
    }
}

(3)配置文件:beans5.xml

<!--scope屬性必須設(shè)置為singleton,否則創(chuàng)建的Bean不會被銷毀-->
<!--init-method屬性配置初始化方法,destroy-method屬性銷毀方法-->
<bean id="cat" scope="singleton" class="com.jd.dao.Cat" init-method="initMethod" destroy-method="destroyMethod">
    <property name="name" value="大橘"></property>
</bean>
<!--配置后置處理器,為當(dāng)前配置文件中的所有bean添加后置處理器的處理-->
<bean id="myBeanPostProcessor" class="com.jd.dao.myBeanPostProcessor"></bean>

(4)測試

@Test
public void catTest(){
    //1.初始化Spring容器,加載配置文件
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans5.xml");
    //2.通過Spring容器獲取Bean的實(shí)例
    Cat cat = (Cat) applicationContext.getBean("cat");
    //3.輸出獲取的實(shí)例
    System.out.println("第六步:獲取創(chuàng)建Bean實(shí)例"+cat);
    //4.手動關(guān)閉
    applicationContext.close();
}

到此這篇關(guān)于詳解Spring中Bean的作用域與生命周期的文章就介紹到這了,更多相關(guān)Spring Bean的作用域與生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝)

    spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝)

    本文主要介紹了spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 對java for 循環(huán)執(zhí)行順序的詳解

    對java for 循環(huán)執(zhí)行順序的詳解

    今天小編就為大家分享一篇對java for 循環(huán)執(zhí)行順序的詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot配置Apollo代碼實(shí)例

    SpringBoot配置Apollo代碼實(shí)例

    這篇文章主要介紹了SpringBoot配置Apollo代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java中的DTO的使用示例

    java中的DTO的使用示例

    在Java中,DTO代表數(shù)據(jù)傳輸對象,本文主要介紹了java中的DTO的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 1秒鐘實(shí)現(xiàn)Springboot?替換/寫入?word文檔里面的文字、圖片功能

    1秒鐘實(shí)現(xiàn)Springboot?替換/寫入?word文檔里面的文字、圖片功能

    這篇文章主要介紹了Springboot?替換/寫入?word文檔里面的文字、圖片,1秒鐘實(shí)現(xiàn),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 使用SpringBoot自定義starter的完整步驟

    使用SpringBoot自定義starter的完整步驟

    這篇文章主要給大家介紹了關(guān)于使用SpringBoot自定義starter的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 2020最新版SSM框架整合教程

    2020最新版SSM框架整合教程

    這篇文章主要介紹了2020最新版SSM框架整合教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Java8合并兩個(gè)Map中元素的正確姿勢

    詳解Java8合并兩個(gè)Map中元素的正確姿勢

    這篇文章主要介紹了詳解Java8合并兩個(gè)Map中元素的正確姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mybatis?如何傳入字符串參數(shù),分割并遍歷

    Mybatis?如何傳入字符串參數(shù),分割并遍歷

    這篇文章主要介紹了Mybatis?如何傳入字符串參數(shù),分割并遍歷,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java設(shè)計(jì)模式UML之類圖精解

    Java設(shè)計(jì)模式UML之類圖精解

    在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個(gè)Employee類,它包含name,age和email這3個(gè)屬性,以及modifyInfo()方法
    2022-02-02

最新評論

太原市| 颍上县| 台山市| 土默特左旗| 开化县| 南宫市| 天镇县| 辽阳县| 岳阳县| 贺州市| 石渠县| 安岳县| 盐边县| 申扎县| 巩留县| 大足县| 巩义市| 扬州市| 天水市| 祁连县| 双峰县| 通化市| 普兰县| 舒城县| 大埔区| 阳信县| 昭苏县| 阿巴嘎旗| 沈丘县| 民权县| 马山县| 永修县| 高清| 兰考县| 湛江市| 电白县| 攀枝花市| 兴安盟| 舒兰市| 津南区| 娄烦县|