亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、Bean的作用域

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

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

作用域的種類:(sing)

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

① singleton單實例,prototype多實例

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

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

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的實例
    Cat cat1 = (Cat) applicationContext.getBean("cat");
    Cat cat2 = (Cat) applicationContext.getBean("cat");
    //3.輸出獲取的實例
    System.out.println(cat1);
    System.out.println(cat2);
}

prototype作用域:

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

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

3測試:

二、Bean的生命周期

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

(1)通過無參構造器創(chuàng)建bean實例

(2)調用屬性setter方法為bean的屬性設置值

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

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

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

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

(7)當容器關閉時候,調用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("第二步:調用屬性setter方法為bean的屬性設置值");
    }
    public Cat(){
        System.out.println("第一步;通過無參構造器創(chuàng)建bean實例");
    }
    //初始化方法(在配置文件中配置實現(xiàn)調用)
    public void initMethod(){
        System.out.println("第四步:調用bean的初始化的方法");
    }
    //銷毀方法(在配置文件中配置實現(xiàn)調用)
    public void destroyMethod(){
        System.out.println("第七步:當容器關閉時候,調用bean的銷毀的方法");
    }
}

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

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

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

(3)配置文件:beans5.xml

<!--scope屬性必須設置為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>
<!--配置后置處理器,為當前配置文件中的所有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的實例
    Cat cat = (Cat) applicationContext.getBean("cat");
    //3.輸出獲取的實例
    System.out.println("第六步:獲取創(chuàng)建Bean實例"+cat);
    //4.手動關閉
    applicationContext.close();
}

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

相關文章

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

    Struts2攔截器Interceptor的原理與配置實例詳解

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

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

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

    RocketMQ延遲消息簡明介紹

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

    Java設計模式之外觀模式示例詳解

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

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

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

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

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

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

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

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

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

    jvm垃圾回收算法詳細解析

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

    Java JVM原理與調優(yōu)_動力節(jié)點Java學院整理

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

最新評論