Springboot bean作用域

作用域

  • 在介绍IoC容器最顶级接口BeanFactory 的时候,可以看到 isSingletonisPrototype 两个方法。

  • 其中,isSingleton 方法如果返回true,则Bean在IoC容器中以单例存在,这也是Spring IoC容器的默认值;
    如果isPrototype方法返回true,则当我们每次获取Bean的时候,IoC 容器都会创建一一个新的Bean,这显然存在很大的不同,这便是Spring Bean 的作用域的问题。

  • 在一般的容器中,Bean 都会存在单例(Singleton)和原型(Prototype) 两种作用域,Java EE广泛地使用在互联网中,而在Web 容器中,则存在页面(page)、请求(request)、 会话( session)和应用(application) 4种作用域。

  • 对于页面(page),是针对JSP当前页面的作用域,所以Spring是无法支持的。为了满足各类的作用域,在Spring的作用域中就存在如表所示的几种类型。

    作用域类型使用范围作用域描述
    singleton所有 Spring 应用默认值, loC 容器只存在单例
    prototype所有 Spring 应用每当从 IoC 容器中取出一个 Bean ,则创建 个新的 Bean
    sessionSpring Web 应用HTTP 会话
    applicationSpring Web 应用Web 工程生命周期
    requestSpring Web 应用Web 工程单次请求( request)
    globalSessionSpring Web 应用在一个全局的 HTTP Session 中, Bean 定义对应 个实例 实践中基本不使用

    对于表中的作用域,常用的是加粗的4种。对于 application 作用域,完全可以使用单例来替代。

单例(SingLeton)和原型( Prototype)的区别

@Component 
**//@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)** 
public class ScopeBean {}

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)注释掉, 这样就是启用默认的作用域,实际就是单例 。

这里的ConfigurableBeanFactory 只能提供单例(SCOPE_SINGLETON)和原型(SCOPE_PROTOTYPE)两种作用域供选择;
如果是在Spring MVC环境中,还可以使用WebApplicationContext去定义其他作用域,如请求(SCOPE_REQUEST)、会话(SCOPE_SESSION)和应用(SCOPE_APPLICATION)。

例如,下面的代码就是定义请求作用域。

WebApplicationContext.SCOPE_REQUEST

@Component 
@Scope(WebApplicationContext.SCOPE REQUEST) 
public class ScopeBean {}

这样同一个请求范围内去获取这个Bean的时候,只会共用同一个Bean,第二次请求就会产生新的Bean。因此两个不同的请求将获得不同的实例的Bean,这一点是需要注意的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值