欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、Bean的作用域

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

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

作用域的種類:(sing)

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

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

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

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

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>

測(cè)試:

//Bean的作用域測(cè)試方法
@Test
public void catTest(){
    //1.初始化Spring容器,加載配置文件
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans5.xml");
    //2.通過(guò)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)行測(cè)試:

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

3測(cè)試:

二、Bean的生命周期

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

(1)通過(guò)無(wú)參構(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中作為屬性手動(dòng)配置;

② 只有singleton作用域的Bean才會(huì)執(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("第一步;通過(guò)無(wú)參構(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就是通過(guò)實(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不會(huì)被銷毀-->
<!--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)測(cè)試

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

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

相關(guān)文章

  • Struts2攔截器Interceptor的原理與配置實(shí)例詳解

    Struts2攔截器Interceptor的原理與配置實(shí)例詳解

    攔截器是一種AOP(面向切面編程)思想的編程方式.它提供一種機(jī)制是開發(fā)者能夠把相對(duì)獨(dú)立的代碼抽離出來(lái),配置到Action前后執(zhí)行。下面這篇文章主要給大家介紹了關(guān)于Struts2攔截器Interceptor的原理與配置的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • Java ArrayList.add 的實(shí)現(xiàn)方法

    Java ArrayList.add 的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java ArrayList.add 的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • RocketMQ延遲消息簡(jiǎn)明介紹

    RocketMQ延遲消息簡(jiǎn)明介紹

    這篇文章主要介紹了RocketMQ延遲消息,延遲消息是個(gè)啥?顧名思義,就是等一段時(shí)間再消費(fèi)的消息。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java設(shè)計(jì)模式之外觀模式示例詳解

    Java設(shè)計(jì)模式之外觀模式示例詳解

    外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無(wú)須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)。本文將通過(guò)示例詳細(xì)為大家講解一下外觀模式,需要的可以參考一下
    2022-08-08
  • Java中集合List、Set和Map的入門詳細(xì)介紹

    Java中集合List、Set和Map的入門詳細(xì)介紹

    Java集合主要分為三種類型:Set(集)、List(列表)和Map(映射),下面這篇文章主要給大家介紹了關(guān)于Java中集合List、Set和Map的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Java微信公眾平臺(tái)開發(fā)(12) 微信用戶信息的獲取

    Java微信公眾平臺(tái)開發(fā)(12) 微信用戶信息的獲取

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第十二步,微信用戶信息的獲取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • java判斷是否為圖片的步驟和方法

    java判斷是否為圖片的步驟和方法

    在本篇內(nèi)容里小編給大家分享的是關(guān)于java判斷是否為圖片的做法和步驟,需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • Java女裝商城系統(tǒng)的實(shí)現(xiàn)流程

    Java女裝商城系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)女裝商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • jvm垃圾回收算法詳細(xì)解析

    jvm垃圾回收算法詳細(xì)解析

    這篇文章主要介紹了jvm垃圾回收算法詳細(xì)解析,JVM有一套完整的垃圾回收算法,可以對(duì)程序運(yùn)行時(shí)產(chǎn)生的垃圾對(duì)象進(jìn)行及時(shí)的回收,以便釋放JVM相應(yīng)區(qū)域的內(nèi)存空間,確保程序穩(wěn)定高效的運(yùn)行,但在真正了解垃圾回收算法之前,有必要對(duì)JVM的對(duì)象的引用做一個(gè)簡(jiǎn)單的鋪墊
    2022-07-07
  • Java JVM原理與調(diào)優(yōu)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java JVM原理與調(diào)優(yōu)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。下面通過(guò)本文給大家介紹jvm原理與調(diào)優(yōu)相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2017-04-04

最新評(píng)論