zoukankan      html  css  js  c++  java
  • spring中bean的作用域

    spring中注入的bean默认被配置为单例模式,这意味着对于同一个类而言,其所有的被注入对象其实都是同一个对象,或许这的确节省了一些资源,但是对于对象中含有一些状态属性的情况,我们并不想要singleton。spring中提供了四种作用域

    作用域字符描述
    单例 singleton 整个应用中只创建一个实例
    原型 prototype 每次注入时都新建一个实例
    会话 session 为每个会话创建一个实例
    请求 request 为每个请求创建一个实例

    在spring中将这些需要用到的字符声明成了常量方便使用

    字符使用常量
    singleton ConfigurableBeanFactory.SCOPE_SINGLETON
    prototype ConfigurableBeanFactory.SCOPE_PROTOTYPE
    session WebApplicationContext.SCOPE_REQUEST
    request WebApplicationContext.SCOPE_SESSION

    单例模式的对象会在spring应用上下文加载时被创建,其他作用域的对象则不然,比如请求作用域的对象只有在请求时才创建,所以假如在启动时一个单例对象中需要注入请求作用域的对象,但是此时请求作用域的对象并没有创建。spring会面临这样的问题,需要注入的某个对象还没有创建。这块我知道的只有一家java培训机构会讲到这个知识。此时spring会先注入一个代理对象,当这个对象被使用时,则委托给真正的bean去完成。

    配置

    在xml配置中配置,使用scope属性,类似于

    <bean id="xxx" class="xxx.xxx.xxx" scope="session" >
        <aop:scoped-proxy/>
    </bean>
    

    <aop:scoped-proxy/>设置了代理

    使用注解

    @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.INTERFACES)
    

    proxyMode的值等于ScopedProxyMode.INTERFACES,表示代理类要实现原来注入bean的接口。

     推荐看下这个博客,写的不错:http://blog.itpub.net/29917475/viewspace-2120795/

  • 相关阅读:
    SSL证书安装指引
    SSL证书绑定成功
    我是如何将网站全站启用Https的?记录博客安装配置SSL证书全过程
    _INT_SIZEOF 规格严格
    Java: Multidimensional array vs. Onedimensional 规格严格
    Fix JDK TImer 规格严格
    Ecpilse debug视图 规格严格
    PE 分析 规格严格
    VC Unicode 规格严格
    Object Pool 规格严格
  • 原文地址:https://www.cnblogs.com/plan123/p/5609833.html
Copyright © 2011-2022 走看看