本文主要介绍Spring annotation @Scope的原理及用法分析,通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考一下。
本文主要从以下几个方面介绍@Scope注释。
什么是@Scope注释?
如何使用@Scope标注?
@Scope批注的使用场景
1、什么是@Scope评论?
@Scope annotation是springIoc容器中的一个作用域,有以下作用域:基本作用域singleton(单实例)、prototype(多实例)、Web作用域(reqeust、session、globalsession)和自定义作用域。
A.singleton singleton模式——全世界只有一个实例。
B.prototype prototype模式——每次获得一个Bean,都会有一个新的实例。
C.request - request表示将为每个HTTP请求生成一个新的bean,该bean只在当前HTTP请求中有效。
D.session - session作用域意味着将为每个HTTP请求生成一个新的bean,该bean只在当前HTTP会话中有效。
E.globalsession -全局会话作用域类似于标准的HTTP会话作用域,但是它只在基于portlet的web应用程序中有意义。
2.如何使用@Scope标注?
将@Scope注释直接添加到bean对象方法中,如下所示:
/**
*定义一个bean对象
* @返回
*/
@范围
@Bean(value='user0 ',name='user0 ',initMethod='initUser ',destroyMethod='destroyUser ')
公共用户getUser(){
System.out.println(“创建用户实例”);
返回新用户('张三',26);
}
@Scope注释默认的单例实例。singleton instance的意义在于,无论你使用多少次,springIOC容器中只会有一个实例。演示如下:创建的实例只打印一次:
AnnotationConfigApplicationContext application context 2=new AnnotationConfigApplicationContext(main config . class);
user bean 2=application context 2 . get bean(user . class);
system . out . println(' instance 1===' bean 2);
user bean 3=application context 2 . get bean(user . class);
system . out . println(' instance 2===' bean 3);
创建用户实例
例1===用户[用户名=张三,年龄=26]
例2===用户[用户名=张三,年龄=26]
接下来,将实例类型更改为原型,如下所示:
@Scope(值='prototype ')
运行结果如下:
创建用户实例
例1===用户[用户名=张三,年龄=26]
创建用户实例
例2===用户[用户名=张三,年龄=26]
注意:这里只演示了两个常用的示波器,其他的可以下去自己试试。
3.@Scope批注的使用场景
几乎90%的企业可以使用singleton单实例,所以spring的默认类型也是singleton。虽然singleton保证了整个世界都是一个实例,提高了性能,但是如果实例中存在非静态变量,就会导致线程安全问题和共享资源的竞争。
设置为prototype时:每次发出连接请求时,都会生成一个bean实例,这也会导致一个问题。当请求数量增加时,性能会下降,因为创建的实例会导致频繁的gc,增加GC持续时间。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。