一分钟学会spring注解之@Scope注解
今天主要从以下几方面来介绍一下@Scope注解
@Scope注解是什么
@Scope注解怎么使用
@Scope注解的使用场景
1,@Scope注解是什么
@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域
a.singleton单例模式 -- 全局有且仅有一个实例
b.prototype原型模式 -- 每次获取Bean的时候会有一个新的实例
c.request -- request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
d.session -- session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
e.globalsession -- global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义
2,@Scope注解怎么使用
直接在bean对象方法上增加@Scope注解就可以如下:
/** * 定义一个bean对象 * @return */ @Scope @Bean(value="user0",name="user0",initMethod="initUser",destroyMethod="destroyUser") public User getUser(){ System.out.println("创建user实例"); return new User("张三",26); }
@Scope注解默认的singleton实例,singleton实例的意思不管你使用多少次在springIOC容器中只会存在一个实例,演示如下只打印了一次创建实例:
AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);User bean2 = applicationContext2.getBean(User.class);System.out.println("实例1 === "+bean2);User bean3 = applicationContext2.getBean(User.class);System.out.println("实例2 === "+bean3);
创建user实例实例1 === User [userName=张三, age=26]实例2 === User [userName=张三, age=26]
接下来把实例类型改为prototype如下:
@Scope(value="prototype")
运行结果如下:
创建user实例实例1 === User [userName=张三, age=26]创建user实例实例2 === User [userName=张三, age=26]
注:这边只演示了我们常用的两种作用域,其他的大家可以下去自己试试
3,@Scope注解的使用场景
几乎90%以上的业务使用singleton单实例就可以,所以spring默认的类型也是singleton,singleton虽然保证了全局是一个实例,对性能有所提高,但是如果实例中有非静态变量时,会导致线程安全问题,共享资源的竞争
当设置为prototype时:每次连接请求,都会生成一个bean实例,也会导致一个问题,当请求数越多,性能会降低,因为创建的实例,导致GC频繁,gc时长增加
以上是今天文章的所有内容,欢迎大家吐槽
更多优质文章请关注以下公众号查阅:
转载于:https://blog.51cto.com/4247649/2118351
一分钟学会spring注解之@Scope注解相关推荐
- java的 import注解_[java]一分钟学会spring注解之@Import注解
今天主要从以下几方面来介绍一下@Import注解 @Import注解是什么 @Import的三种使用方式 1,@Import注解是什么 通过导入的方式实现把实例加入springIOC容器中 2,@Im ...
- Spring中的@scope注解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. @Scope 简单点说就是用来指定bean的作用域作用域 (官方解释:scope用来声明IOC容器中 ...
- 五分钟学会 Spring Cloud Sleuth:分布式请求链路跟踪(小白必看,一看就会教程)
Spring Cloud Sleuth:分布式请求链路跟踪 Spring Cloud Sleuth 简介 给服务添加请求链路跟踪 整合Zipkin获取及分析日志 使用Elasticsearch存储跟踪 ...
- 五分钟学会 Spring Boot Admin:微服务应用监控(小白必看,一看就会教程)
Spring Boot Admin:微服务应用监控 Spring Boot Admin 简介 监控信息演示 结合注册中心使用 功能演示 添加登录认证 文末福利 Spring Boot Admin 可以 ...
- 【Spring注解驱动开发】使用@Scope注解设置组件的作用域
写在前面 Spring容器中的组件默认是单例的,在Spring启动时就会实例化并初始化这些对象,将其放到Spring容器中,之后,每次获取对象时,直接从Spring容器中获取,而不再创建对象.如果每次 ...
- Spring系列(四):@Scope注解用法介绍
今天给大家分享Spring中@Scope注解的用法,希望对大家能有所帮助! @Scope 定义以及作用 @Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作 ...
- Spring @scope注解
@scope注解使用方式: @scope("prototype") @scope注解可取值: singleton prototype request session global ...
- spring springboot springcloud常用注解
@SpringBootApplication 组合注解,用在启动类上,源码: @Retention(RetentionPolicy.RUNTIME) @SpringBootConfiguration ...
- Spring 中的各种注解,光会用可不够哦!
来源:https://digdeep.cnblogs.com/digdeep/p/4525567.html 1. Java中的注解 2. 使用 元注解 来自定义注解 和 处理自定义注解 3. spri ...
最新文章
- Learning by doing 系列文章(之一)如何在 Python 中使用 epoll ?
- 关于mtl_transactions_interface表序列
- oracle9i在windows上的dataguard配置
- android启动---lk入口文件crt0.s解析
- 获取ISAPI_Rewrite重写后的URL
- yabailv 运放_运放入门
- linux下的crontab
- 嵌入式实时系统的任务设计
- 马上就校招了,是要去实习还是复习?
- FastDfs之TrackerServer的详细配置介绍
- mysql 调用存储过程 inout_MySQL存储过程in、out和inout参数示例和总结
- qcom camera smmu 学习(3)
- 利用PLTS从F域Export出T域数据指南
- 投标是个技术活,不这样做要么苟且,要么狗带
- 计算机组成原理选择题题库
- ICE 3.7.4 实现客户服务端hello world
- 使用python embedded distribution
- Opencv图像处理之平滑(Smoothing)模糊(Blurring)操作
- “遛狗不牵绳-违法”--遛狗不牵绳识别检测 助力智慧城市犬类管理
- 技术支持快递第6 期
热门文章
- 重回大厂 996 的年轻人:还是先搞钱
- 高性能计时器Timer的设计(时间轮和时间堆两种方式)
- 【RxSwift 实践系列 2/3】thinking in Rx- Create和Drive
- 1.spring boot要求最低jdk1.8,平安默认1.6问题,-》安装JDK1.8 2.maven 3.3.3要求最低jdk1.7-安装jdk 1.8...
- 《javascript模式》 容易踩中的那些坑
- SpringBoot-Security-用户权限分配-配置验证规则
- IDEA+Maven+Springboot:invalid bound statement (not found) 解决办法
- 【Cocos2d-x】开发实战-Cocos中的字符串、标签和中文乱码
- 正式迁移博客到osc
- ASP.NET -- 缓存技术(1)