VIP免费

springboot @Scope 注解使用

精品 @Scope
182
DEMO程序园
程序猿 2020-06-22
积分:0

简介:

springboot简化了配置,不再需要xml文件;在ssm整合时我们都是通过xml来配置bean的作用域;而springboot为我们提供了@Scope 注解来代替繁琐的xml文件:当设置为prototype时:每次连接请求,都会生成一个bean实例,也会导致一个问题,当请求数越多,性能会降低,因为创建的实例,导致GC频繁,gc时长增加。设置为单例模式:保证了全局都会有一个实例,对性能有所提高,

springboot简化了配置,不再需要xml文件;在ssm整合时我们都是通过xml来配置bean的作用域;

而springboot为我们提供了@Scope 注解来代替繁琐的xml文件:

当设置为prototype时:每次连接请求,都会生成一个bean实例,也会导致一个问题,当请求数越多,性能会降低,因为创建的实例,导致GC频繁,gc时长增加。

设置为单例模式:保证了全局都会有一个实例,对性能有所提高,但是如果实例中有非静态变量时,会导致线程安全问题,共享资源的竞争。

默认是单例模式,即scope="singleton"。另外scope还有prototype、request、session、global session作用域。scope="prototype"多例


@scope默认是单例模式(singleton)


如果需要设置的话@scope("prototype")


1.singleton单例模式,


  全局有且仅有一个实例


2.prototype原型模式,


  每次获取Bean的时候会有一个新的实例


3.request


  request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:

request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:

如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可: 

4.session

  session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

5.global session

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。

但是一般常见的话一般会使用上面1和2两种,如在多线程编程时我们就可能需要考虑使用prototype原型模式。


评论
最新发布
2024-03-31
2024-03-31
2024-03-28
2024-03-28
2024-03-25
2024-03-19
2024-03-19
2024-03-13
2024-03-13
2024-03-12
layui

微信扫码关注DEMO程序园公众号

本周热门
1695
1283
1085
1012
908
859
848
741
646
432
热门下载
27
20
19
14
14
12
12
12
12
11