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

Spring?bean配置單例或多例模式方式

 更新時間:2022年01月19日 14:48:58   作者:鼓浪嶼島與海  
這篇文章主要介紹了Spring?bean配置單例或多例模式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring bean配置單例或多例模式

單例

spring bean 默認是單例默認,在對應.xml文件中的配置是:

<bean id="user" class="..." scope="singleton"/>

singleton就是配置這個bean是否是單例的,如果不寫,就是默認值true。

單例模式:每個bean定義只生成一個對象實例,每次getBean請求獲得的都是此實例

單例模式分為餓漢模式和懶漢模式, 

餓漢模式spring singleton的缺省是餓漢模式:啟動容器時(即實例化容器時),為所有spring配置文件中定義的bean都生成一個實例
懶漢模式在第一個請求時才生成一個實例,以后的請求都調用這個實例spring singleton設置為懶漢模式:<beansdefault-lazy-init="true">

多例

配置多例:

<bean id="user" class="..." scope="prototype"/>

多例模式:任何一個實例都是新的實例,調用getBean時,就new一個新實例

Spring scope配置單例、多例模式

1、scope屬性介紹

scope="“是標簽的一個屬性,作用是:控制對象的作用范圍(單例、多例模式)

取值:scope=”"是標簽的一個屬性,作用是:控制對象的作用范圍(單例、多例模式)

    當時導入包spring-mvc和包spring-mvc-portlet可以使用下列值(web應用):

    • request:當每次請求時實例化。
    • session:當在一個session周期內,對象時單例的。
    • globalSession:依賴包spring-mvc-portlet,類似于session.
    • application:在一個application對象內是單例的。
    • singleton:默認值,單例模式;
    • prototype:多例,每次獲取對象都會重新實例化;

    所需包:

    在這里插入圖片描述

    2、scope配置

    Application.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
        <bean id="user" class="Model.User" scope="singleton">
            <aop:scoped-proxy/>
        </bean>
    </beans>
    

    3、單例模式底層實現(xiàn)模擬

    3.1、 模擬單例模式 — 懶漢式

    **懶漢式的優(yōu)點是:**

    1、提升運行效率;

    2、實現(xiàn)數據共享,例如application對象,application對象單例模式,在程序啟動,對象實例化之后,程序結束之前,實例化的對象都可以實現(xiàn)共享。

    懶漢式的缺點是:使用了多線程鎖機制,導致效率低。

    實現(xiàn):

    package SingleTon;
    public class SingleTon {
        private static SingleTon singleTon;
        /**
         * 創(chuàng)建對象一般都是用new XX(),此處XX()是類對象的無參構造方法
         * 一般無參構造方法都public XX(){},但是單例模式使用private修飾構造方法,
         * 這樣是為了不讓其它類創(chuàng)建單例對象。
         *
         * 構造方法的兩個條件:方法名與類名相同,沒有返回值
         */
        private SingleTon(){
        }
        /**
         * 實例方法,使用實例方法創(chuàng)建對象,
         * 因為實例方法需要對象才能調用,然而構造方法時private修飾的,其他類不能使用,
         * 因此實例方法應該是靜態(tài)的(static),使用public修飾,其他類可以使用,返回值要是類對象.
         *
         */
        public static SingleTon getInstance(){
            /**
             * 判斷對象是否已經被創(chuàng)建,要有一個全局的類類型的參數
             * 靜態(tài)方法不能使用非靜態(tài)的變量,因此變量應該設置成靜態(tài)的(static)
             */
            if(singleTon == null){
                /**
                 * 如果是多線程的,此處需要使用鎖,所對象使用該類對象
                 * 例如:同時兩個線程使用該對象,該對象還為實例化,此處如果不使用鎖就會導致對象被重復實例化,不符合單例模式
                 */
                synchronized(SingleTon.class){
                    /**
                     * 雙重驗證,防止多線程重復實例化對象
                     *
                     * 使用鎖缺點:效率較低。
                     */
                    if(singleTon == null){
                        new SingleTon();
                    }
                }
            }
            return singleTon;
        }
    }
    

    3.2、餓漢式:優(yōu)點是解決了懶漢式效率低的缺點。

    package SingleTon;
    /***
     * 單例模式 -- 餓漢式
     */
    public class SingleTon2 {
        /**
         * 餓漢式構造方法、全局變量、實例方法都與懶漢式一樣,區(qū)別在于餓漢式在全局變量處就已經實例化了對象
         * 餓漢式不用考慮多線程問題,解決了懶漢式效率低的問題。
         */
        private static SingleTon2 singleTon2 = new SingleTon2();
        /**
         * 構造方法
         */
        private SingleTon2(){}
        /**
         * 實例方法
         */
        public static SingleTon2 getInstance(){
            return singleTon2;
        }
    }
    

    3.3、測試方法:

    package SingleTon;
    public class Test {
        public static void main(String[] args) {
            SingleTon singleTon = SingleTon.getInstance();
            System.out.println(singleTon);
        }
    }
    

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

    相關文章

    • 關于RestTemplate的使用深度解析

      關于RestTemplate的使用深度解析

      這篇文章主要介紹了對RestTemplate的深度解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
      2021-10-10
    • 深入淺出理解Java泛型的使用

      深入淺出理解Java泛型的使用

      這篇文章主要介紹了深入淺出理解Java泛型的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
      2021-09-09
    • Java 數據結構之刪除鏈表中重復的結點

      Java 數據結構之刪除鏈表中重復的結點

      在一個排序的鏈表中,會存在重復的結點,如何實現(xiàn)刪除該鏈表中重復的結點,重復的結點不保留,并返回鏈表頭指針呢?接下來小編將帶你詳細介紹
      2021-12-12
    • Java FileUploadUtil工具類詳解

      Java FileUploadUtil工具類詳解

      這篇文章主要為大家詳細介紹了Java FileUploadUtil工具類的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
      2017-09-09
    • java創(chuàng)建以任意圖片為背景的窗口

      java創(chuàng)建以任意圖片為背景的窗口

      這篇文章主要為大家詳細介紹了java創(chuàng)建以任意圖片為背景的窗口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
      2017-12-12
    • java中gradle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

      java中gradle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

      在使用Gradle時開發(fā)者可能會遇到org.gradle?.api.plugins.MavenPlugin報錯提醒,這篇文章主要給大家介紹了關于java中gradle項目報錯org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下
      2023-12-12
    • Spring啟動流程refresh()源碼深入解析

      Spring啟動流程refresh()源碼深入解析

      這篇文章主要給大家介紹了關于Spring啟動流程refresh()源碼深入解析的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
      2020-09-09
    • mybatisplus如何實現(xiàn)排序

      mybatisplus如何實現(xiàn)排序

      這篇文章主要介紹了mybatisplus如何實現(xiàn)排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
      2024-02-02
    • SpringBoot定制化Starter實現(xiàn)方法

      SpringBoot定制化Starter實現(xiàn)方法

      小伙伴們曾經可能都經歷過整天寫著CURD的業(yè)務,都沒寫過一些組件相關的東西,這篇文章記錄一下SpringBoot如何自定義一個Starter。原理和理論就不用多說了,可以在網上找到很多關于該方面的資料,這里主要分享如何自定義
      2023-01-01
    • Java實現(xiàn)馬踏棋盤算法

      Java實現(xiàn)馬踏棋盤算法

      這篇文章主要為大家詳細介紹了Java實現(xiàn)馬踏棋盤算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
      2022-02-02

    最新評論