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

Spring中@Scope注解用法解析

 更新時間:2023年11月24日 09:58:02   作者:IT技術(shù)分享社區(qū)  
這篇文章主要介紹了Spring中@Scope注解用法解析,@Scope注解主要作用是調(diào)節(jié)Ioc容器中的作用域,在Spring IoC容器中主要有以下五種作用域,需要的朋友可以參考下

@Scope 定義以及作用

@Scope注解主要作用是調(diào)節(jié)Ioc容器中的作用域

在Spring IoC容器中主要有以下五種作用域:

基本作用域:singleton(單例)、prototype(多例);Web 作用域(reqeust、session、globalsession),自定義作用域。

@Scope 作用域類型

1  @Scope("singleton")

單實例屬于默認作用域,IOC容器啟動的時候就會調(diào)用方法創(chuàng)建對象,以后每次獲取都是從Spring容器當中拿同一個對象(map當中)。

2 @Scope("prototype")

多實例,在IOC容器啟動創(chuàng)建的時候,并不會直接創(chuàng)建對象放在容器中去,當你需要調(diào)用的時候,才會從容器當中獲取該對象然后進行創(chuàng)建。

3 @Scope("request")

同一個請求創(chuàng)建一個實例

4 @Scope("session")

同一個session創(chuàng)建一個實例

5 @Scope("globalsession")

同一個globalsession創(chuàng)建一個實例

示例演示

1 新建Person.java

package com.spring.bean;
public class Person {
    private String name;
    private Integer age;
    private String address;
    public Person(String name, Integer age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public Person() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2  新建配置類 TestScopeConfig.java

package com.spring.config;
 
 
import com.spring.bean.Person;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
 
 
@Configuration
 
 
public class TestScopeConfig {
    @Bean
    @Scope("singleton")
    //@Scope("prototype")
    public Person person() {
        System.out.println("容器添加Person對象......");
        return new Person("小孫", 28, "西安");
    }
}

3  新建測試類 TestScope.java

package com.spring.test;
 
 
import com.spring.bean.Person;
import com.spring.config.TestBeanConfig;
import com.spring.config.TestScopeConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 
public class TestScope {
    public static void main(String[] args) {
        //配置文件方式
        AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestScopeConfig.class);
 
 
        Object person1 = annotationContext.getBean("person");
        Object person2 = annotationContext.getBean("person");
        System.out.println(person1);
        System.out.println(person2);
        boolean flag = person1 == person2;
        if (flag) {
            System.out.println("是同一個對象");
        } else {
            System.out.println("不是同一個對象");
        }
 
 
    }
 
 
}

4、輸出效果

@Scope("prototype")

輸出結(jié)果:

容器添加Person對象......
Person{name='小孫', age='28', address='西安'}
Person{name='小孫', age='28', address='西安'}
是同一個對象

@Scope("prototype")

輸出結(jié)果:

容器添加Person對象......
容器添加Person對象......
Person{name='小孫', age='28', address='西安'}
Person{name='小孫', age='28', address='西安'}
不是同一個對象

5、@Scope注解的使用場景

目前有90%以上的業(yè)務(wù)系統(tǒng)都使用singleton單實例,因此spring也默認的類型也是singleton,singleton雖然保證了全局是一個實例,對性能有所提高,但是如果實例中有非靜態(tài)變量時,可能會導(dǎo)致線程安全、共享資源的競爭等問題。

當設(shè)置為prototype多實例時:每次連接請求,都會重新生成一個新的bean實例,這也會導(dǎo)致一個問題,當請求數(shù)越多,性能會降低,因為頻繁創(chuàng)建的新的實例,會導(dǎo)致GC頻繁,GC回收時長增加。要根據(jù)實際情況選擇哪一種方式。

到此這篇關(guān)于Spring中@Scope注解用法解析的文章就介紹到這了,更多相關(guān)@Scope注解用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java命令設(shè)計模式優(yōu)雅解耦命令和執(zhí)行提高代碼可維護性

    Java命令設(shè)計模式優(yōu)雅解耦命令和執(zhí)行提高代碼可維護性

    本文介紹了Java命令設(shè)計模式,它將命令請求封裝成對象,以達到解耦命令請求和執(zhí)行者的目的,從而提高代碼可維護性。本文詳細闡述了該模式的設(shè)計原則、實現(xiàn)方法和優(yōu)缺點,并提供了實際應(yīng)用場景和代碼示例,幫助讀者深入理解和應(yīng)用該模式
    2023-04-04
  • SpringBoot搭建全局異常攔截

    SpringBoot搭建全局異常攔截

    這篇文章主要介紹了SpringBoot搭建全局異常攔截,本文通過詳細的介紹與代碼的展示,詳細的說明了如何搭建該項目,包括創(chuàng)建,啟動和測試步驟,需要的朋友可以參考下
    2021-06-06
  • Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊列

    Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊列

    這篇文章主要介紹了Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊列,工作中遇到項目使用Disruptor做消息隊列,對你沒看錯,不是Kafka,也不是rabbitmq。Disruptor有個最大的優(yōu)點就是快,還有一點它是開源的哦,下面做個簡單的記錄
    2022-06-06
  • elasticsearch索引index數(shù)據(jù)功能源碼示例

    elasticsearch索引index數(shù)據(jù)功能源碼示例

    這篇文章主要為大家介紹了elasticsearch索引index功能源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • java ZXing生成二維碼及條碼實例分享

    java ZXing生成二維碼及條碼實例分享

    本文分享了java ZXing生成二維碼及條碼的實例代碼,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • Java自定義枚舉的toString方法以展示其字段信息

    Java自定義枚舉的toString方法以展示其字段信息

    這篇文章主要為大家詳細介紹了Java如何自定義枚舉的?toString?方法以展示其字段信息,并提供一個完整且可以直接運行的代碼示例,需要的可以參考下
    2024-12-12
  • 詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    這篇文章主要介紹了詳解JAVA調(diào)用WCF服務(wù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • MyBatis使用嵌套查詢collection和association的實現(xiàn)

    MyBatis使用嵌套查詢collection和association的實現(xiàn)

    本文詳細介紹了使用MyBatis框架進行數(shù)據(jù)庫操作時,如何利用collection標簽實現(xiàn)一對多的嵌套查詢和使用association標簽實現(xiàn)一對一的嵌套查詢,感興趣的可以了解一下
    2024-09-09
  • Spring Boot 之HelloWorld開發(fā)案例

    Spring Boot 之HelloWorld開發(fā)案例

    這篇文章主要介紹了Spring Boot 之HelloWorld開發(fā)案例,需要的朋友可以參考下
    2017-04-04
  • activiti實現(xiàn)員工請假流程解析

    activiti實現(xiàn)員工請假流程解析

    這篇文章主要介紹了activiti實現(xiàn)員工請假流程解析,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論