Spring系列(四):@Scope注解用法介绍

       3ca90dfa78f30d6e99244ac78d751175.png         

今天给大家分享Spring中@Scope注解的用法,希望对大家能有所帮助!

  1. @Scope 定义以及作用

@Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作用域:基本作用域:singleton(单例)、prototype(多例);Web 作用域(reqeust、session、globalsession),自定义作用域。

  1. @Scope 作用域类型

2.1  @Scope("singleton")

单实例属于默认作用域,IOC容器启动的时候就会调用方法创建对象,以后每次获取都是从Spring容器当中拿同一个对象(map当中)。

2.2 @Scope("prototype")

多实例,在IOC容器启动创建的时候,并不会直接创建对象放在容器中去,当你需要调用的时候,才会从容器当中获取该对象然后进行创建。

2.3 @Scope("request")

同一个请求创建一个实例

2.4 @Scope("session")

同一个session创建一个实例

2.5 @Scope("globalsession")

同一个globalsession创建一个实例

  1. 示例演示

3.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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age='" + age + '\'' +", address='" + address + '\'' +'}';}
}

3.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;@Configurationpublic class TestScopeConfig {@Bean@Scope("singleton")//@Scope("prototype")public Person person() {System.out.println("容器添加Person对象......");return new Person("小孙", 28, "西安");}
}

3.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、输出效果

4.1  @Scope("prototype")

输出结果:

容器添加Person对象......Person{name='小孙', age='28', address='西安'}Person{name='小孙', age='28', address='西安'}是同一个对象

4.2  @Scope("prototype")

    输出结果:

容器添加Person对象......容器添加Person对象......Person{name='小孙', age='28', address='西安'}Person{name='小孙', age='28', address='西安'}不是同一个对象

5、@Scope注解的使用场景

目前有90%以上的业务系统都使用singleton单实例,因此spring也默认的类型也是singleton,singleton虽然保证了全局是一个实例,对性能有所提高,但是如果实例中有非静态变量时,可能会导致线程安全、共享资源的竞争等问题。

当设置为prototype多实例时:每次连接请求,都会重新生成一个新的bean实例,这也会导致一个问题,当请求数越多,性能会降低,因为频繁创建的新的实例,会导致GC频繁,GC回收时长增加。要根据实际情况选择哪一种方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记整理——linux程序设计

数据库 (2013/2/27 16:07:11) 线程 (2013/2/27 15:47:51) 信号 (2013/2/27 15:31:28) 消息队列、共享内存 (2013/2/26 21:52:43) 管道、命名管道 (2013/2/26 21:24:39) 返回一个指向原文件所指向的地址,即两个文件描述符指向同一个文件。进程 (2013/2/26 20:37:25) …

电脑技巧:如何实现电脑一键自动关机和重启?

目录 1、一键关机 2、一键重启 今天小编给大家分享如何实现电脑一键自动关机和重启,感兴趣的朋友可以尝试一下! 1、一键关机 首先我们在电脑桌面空白地方点右键,在弹出的属性栏里面找到新建, 在新建下面我们找到文本文档点击它&am…

手机知识:手机OTG知识介绍,看完你就懂了

现在很多的智能手机都自带OTG功能。估计很多朋友很少知道这个OTG功能是什么,究竟有什么用?其实OTG的实用功能还是很多的,今天小编给大家科普一下手机的OTG功能,感兴趣的朋友可以拿起自己的手机试一试! 1、手机OTG概念介…

Linux常用的20条运维命令

目录 1、 删除0字节文件 2、 查看进程按内存从大到小排序 3、查看磁盘和分区信息 4、 打开文件数目:检查打开文件总数是否过多 5、 查看网络信息 6、 核心日志:检查是否有异常错误记录 7、 系统日志:检查是否有异常错误记录 8、查看服务 9、 …

操作系统的发展

1:无操作系统 2:单道批处理系统 3:多道程序系统 4:微机操作系统 5:实时操作系统

电脑技巧:如何彻底关闭电脑右下角闪烁弹窗广告

我们经常在使用电脑或者玩游戏的时候,经常会有一些广告弹窗的骚扰,这让我们使用很不爽。那么出现Win10电脑右下角闪烁弹窗广告怎么办?今天小编给大家介绍一下,如何彻底关闭这些令人讨厌的弹窗广告,还大家一个干净的上网…

批处理系统和分时系统和事实系统的特点

一:单道批处理系统特点 1:自动性 2:顺序性 3:单道性 二:多道批处理系统的特点 1:多道性 2:无序性 三:分时系统的特点 四:实时系统的特点 1:多路性 2:独立性 3:及时性 4:交互性 5:可靠性 操…

网络知识:路由器不关闭这个功能,视频越刷越卡

大家是否发现,长时间在刷视频,网速好似会越来越慢呢?经常需要加载一下才能正常播放。或许我们知道这可能是路由器发热,才出现了小问题,当然这可能是一部分因素,但其他影响因素你知道吗? 不知道大…

Spring系列(五):@Lazy懒加载注解用法介绍

目录 1、Lazy 懒加载注解的概念 2、Lazy 懒加载注解作用 3、Lazy 懒加载注解使用示例 3.1 新建配置类TestLazyConfig.java 3.2 新建测试类 TestLazy.java 今天给大家介绍Lazy懒加载注解用法,希望对大家能有所帮助! 1、Lazy 懒加载注解的概念 SpringIoC容…

内存管理

一:内存管理 1:内存分配 2:内存保护 3:地址映射 4:内存扩充

网络知识:视频监控传输带宽与存储容量的计算方法

目录 一、网络传输的几个概念 二、传输宽带计算公式 2.1,网络带宽大小比特率大小监控数量 2.2,具体监控摄像机端的比特率(每种品牌摄像机略有差异) 2.3,监控中心所需要带宽 2.4,存储空间容量计算 监控视频系…

Spring系列(六):@Conditional注解用法介绍

目录 1、Conditional注解介绍 2、Conditional的源码内容如下: 3、用法示例 3.1 新建Book.java 文件 3.2 CNCondition.java 文件 3.3 ZHCondition.java 文件 3.4 新建TestConditionalConfig.java 配置文件 3.5 新建TestConditional.java 测试文件 4、Conditional应用…

手机知识:手机蓝牙有6个使用场景,你都知道吗?

估计很多人都没有深入的了解蓝牙的功能,蓝牙的有些功能强大到不可思议。 1. 连接蓝牙耳机 随着3.5mm的耳机孔被很多机型取消以后,不少用户都只能选择使用蓝牙耳机或者转换器。 那么这时候蓝牙功能就发挥了很大的用处,现在多数人都会选择使用A…

电脑知识:如何保养自己的电脑,看完你就懂了

目录 一、环境对电脑寿命的影响是不可忽视的。 二、良好的个人使用习惯对电脑的影响也很大 2.1 建议正确地执行开机和关机顺序 2.1.1 开机的顺序 2.1.2 关机顺序 2.2 电脑维护要注意以下几点 2.2.1.保持安置电脑的房间干燥和清洁 2.2.2.正确开机&#xf…

提供用户接口

1:命令接口 2:图形用户接口 3:程序接口

硬件知识:SSD越用越慢的原因,看完你就懂了

从机械硬盘到SSD硬盘的升级,让无数PC用户感受到什么叫“丝滑流畅”。然而,使用一段时间以后,总会感到你的SSD有如下变化: 同样使用环境下,同款测试软件测得的磁盘性能降低;磁盘写入速度出现大起大落的速度波…

网络知识:为什么你家里的网速慢,看完你就懂了?

大家可能深有体会,明明装的是50M光纤, 为什么网速还是这么慢呢?原因何在?这种事几乎大部分人就会遇到。 那么今天我们科普一下“网速为什么慢”很必要。我们一直起来看看。 1 你家的宽带是怎样访问互联网的? 如果把上网…