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

簡單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別

 更新時間:2019年12月24日 11:30:58   作者:何其有靜  
這篇文章主要介紹了簡單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

這篇文章主要介紹了簡單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

1.singleton

當(dāng)一個bean的作用域設(shè)置為singleton, 那么Spring IOC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。

換言之,當(dāng)把一個bean定義設(shè)置為singleton作用域時,Spring IOC容器只會創(chuàng)建該bean定義的唯一實例。這個單一實例會被存儲到單例緩存(singleton cache)中,并且所有針對該bean的后續(xù)請求和引用都將返回被緩存的對象實例,這里要注意的是singleton作用域和GOF設(shè)計模式中的單例是完全不同的,單例設(shè)計模式表示一個ClassLoader中只有一個class存在,而這里的singleton則表示一個容器對應(yīng)一個bean,也就是說當(dāng)一個bean被標識為singleton時候,spring的IOC容器中只會存在一個該bean。

applicationContextER.xml:

  <!--Spring bean作用域-->
  <bean id="get_date" class="java.util.Date" scope="singleton"/>

測試代碼:

public class GetDate {
  public static void main(String[] args){
    //獲取應(yīng)用程序上下文接口
    ApplicationContext apl = new ClassPathXmlApplicationContext("applicationContextER.xml");
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
      //反復(fù)調(diào)用getBean來查看時間
      Date date = (Date) apl.getBean("get_date");
      //休息3秒
      Thread.sleep(1000);
      System.out.println("--------------:" + simpleDateFormat.format(date));

      Date date1 = (Date) apl.getBean("get_date");
      Thread.sleep(1000);
      System.out.println("--------------:" + simpleDateFormat.format(date1));

      Date date2 = (Date) apl.getBean("get_date");
      Thread.sleep(1000);
      System.out.println("--------------:" + simpleDateFormat.format(date2));

      System.out.println("date is date1 : " + (date == date1));
      System.out.println("date1 is date2 : " + (date1 == date2));
    } catch (Exception e) {

    }

  }
}

測試結(jié)果:

23:05:04.298 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'get_date'
23:05:04.298 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'get_date'
23:05:04.308 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Eagerly caching bean 'get_date' to allow for resolving potential circular references
23:05:04.309 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'get_date'
23:05:04.310 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@3108bc]
23:05:04.310 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
23:05:04.311 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source
23:05:04.316 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'get_date'
--------------:2019-12-21 23:05:04
23:05:05.320 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'get_date'
--------------:2019-12-21 23:05:04
23:05:06.324 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'get_date'
--------------:2019-12-21 23:05:04
date is date1 : true
date1 is date2 : true

從上面的結(jié)果可以看出,創(chuàng)建好對象之后,存入了緩存中。后面每次都是獲取的對象都是從緩存中獲取的,而不是新創(chuàng)建的。所以每次獲取的對象都是一樣的。

2.prototype

prototype作用域部署的bean,每一次請求(將其注入到另一個bean中,或者以程序的方式調(diào)用容器的getBean()方法)都會產(chǎn)生一個新的bean實例,相當(dāng)與一個new的操作,對于prototype作用域的bean,有一點非常重要,那就是Spring不能對一個prototype bean的整個生命周期負責(zé),容器在初始化、配置、裝飾或者是裝配完一個prototype實例后,將它交給客戶端,隨后就對該prototype實例不聞不問了。

不管何種作用域,容器都會調(diào)用所有對象的初始化生命周期回調(diào)方法,而對prototype而言,任何配置好的析構(gòu)生命周期回調(diào)方法都將不會被調(diào)用。清除prototype作用域的對象并釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責(zé)。(讓Spring容器釋放被singleton作用域bean占用資源的一種可行方式是,通過使用bean的后置處理器,該處理器持有要被清除的bean的引用。

applicationContextER.xml:

  <!--Spring bean作用域-->
  <bean id="get_date" class="java.util.Date" scope="prototype"/>

測試結(jié)果:

23:01:51.314 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'get_date'
23:01:51.324 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'get_date'
--------------:2019-12-21 23:01:51
23:01:52.329 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'get_date'
23:01:52.329 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'get_date'
--------------:2019-12-21 23:01:52
23:01:53.330 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'get_date'
23:01:53.331 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'get_date'
--------------:2019-12-21 23:01:53
date is date1 : false
date1 is date2 : false

從上面的結(jié)果可以看出,每次都是創(chuàng)建一個新對象,所以每次的對象都不一樣。

總結(jié):從1和2可以看出,當(dāng)你需要全局的唯一標示的時候可以用singleton,而且singleton只創(chuàng)建一個對象,系統(tǒng)消耗資源小.但是用singleton可能會有線程安全化的問題,這個時候就需要用到prototype ??紤]并發(fā)的問題,建議都用prototype。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)在SSM下使用支付寶掃碼支付功能

    java實現(xiàn)在SSM下使用支付寶掃碼支付功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)在SSM下使用支付寶掃碼支付功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java基礎(chǔ)篇之HashMap指定初始值

    Java基礎(chǔ)篇之HashMap指定初始值

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)篇之HashMap指定初始值的相關(guān)資料,HashMap是Java中常用的數(shù)據(jù)結(jié)構(gòu),它提供了高效的鍵值對存儲和查詢功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • java多態(tài)中的就近原則介紹

    java多態(tài)中的就近原則介紹

    大家好,本篇文章主要講的是java多態(tài)中的就近原則介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 詳解JAVA中獲取文件MD5值的四種方法

    詳解JAVA中獲取文件MD5值的四種方法

    這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進行MD5加密,第三步轉(zhuǎn)換成16進制的MD5碼值,需要的朋友可以參考下
    2022-08-08
  • java中找不到符號的解決方案

    java中找不到符號的解決方案

    這篇文章主要介紹了java中找不到符號的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java程序包不存在的兩種解決方法

    Java程序包不存在的兩種解決方法

    有時候我們在導(dǎo)入程序之后,系統(tǒng)會給出錯誤提示:Java:程序包xxxx不存在,本文主要介紹了Java程序包不存在的兩種解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • JDK輸入命令Javac報錯的解決方法

    JDK輸入命令Javac報錯的解決方法

    相信很多人都經(jīng)歷過配置環(huán)境變量失敗的經(jīng)歷,尤其是很多時候明明按照老師教的步驟或者教程上的方法循規(guī)守矩配置卻還是出錯,下面我們來解決一個非常蹊蹺的問題---輸入Java和Java -version都沒問題,但是輸入Javac報錯,感興趣的朋友一起看看吧
    2023-11-11
  • Java中比較Long類型是否相等代碼示例

    Java中比較Long類型是否相等代碼示例

    在Java編程中l(wèi)ong是一種數(shù)據(jù)類型,用于表示整數(shù)值,下面這篇文章主要給大家介紹了關(guān)于Java中比較Long類型是否相等的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • 基于令牌桶的限流器注解的簡單實現(xiàn)詳解

    基于令牌桶的限流器注解的簡單實現(xiàn)詳解

    令牌桶算法是一種常用的流量控制算法,用于限制請求或事件的發(fā)生速率,這篇文章主要介紹了如何基于令牌桶實現(xiàn)限流器注解,需要的可以參考一下
    2023-08-08
  • Java比較兩個List的值是否相等的方法

    Java比較兩個List的值是否相等的方法

    這篇文章主要介紹了Java比較兩個List的值是否相等的方法,涉及java針對隊列比較的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07

最新評論

比如县| 周宁县| 巴南区| 区。| 兴安盟| 临安市| 信宜市| 长治市| 呼玛县| 临高县| 泰宁县| 松原市| 临泽县| 苏尼特右旗| 普定县| 神木县| 布拖县| 沙洋县| 四平市| 苍溪县| 民丰县| 丹江口市| 重庆市| 定安县| 鹿邑县| 平阳县| 营口市| 梁平县| 迭部县| 霸州市| 和林格尔县| 济南市| 拉萨市| 黄山市| 静安区| 洮南市| 德令哈市| 津南区| 蒙山县| 化隆| 额尔古纳市|