技术人的开工红包来了!《华为云开春技术精选集》人手一本,速阅!>>>
1.@Scope作用?
@Scope注解用于作用域。SpringIoc中容器的作用域包含如下几种:
1.1 singleton(单例模式,默认模式):全局有且仅有一个实例
1.2 prototype(多例模式):每次获取bean的时候会生成一个新的实例
1.3 web(request、session、globalSession)
1.3.1 request:每一次HTTP请求都会产生一个新的实例,该实例仅在当前HTTP request内有效
1.3.2 session:每一次HTTP请求都会产生一个新的实例,该实例仅在当前HTTP session内有效
1.3.3 globalSession:它仅仅基于portlet中才生效
1.4 自定义作用域:
2.@Scope使用模式?
直接在bean对象方法上增加@Scope注解就行
单例模式如下
@Bean
@Scope("singleton")
public User getUser(){
System.out.println("全局有且仅有一个实例!");
}
多例模式如下
@Bean
@Scope("prototype")
public User getUser(){
System.out.println("每次获取bean的时候会生成一个新的实例");
}
3.@Scope使用场景?
spring中默认的类型是singleton,singleton保证了全局只有一个实例,对性能有所提高,但如果实例中使用了非静态变量时,会导致线程安全问题,共享资源的竞争问题。
当设置prototype时,每次请求都会生成一个bean实例,这会导致请求越多,bean对象越多,性能下降,甚至会导致GC暴涨。
来源:https://my.oschina.net/u/2312022/blog/4960900