• 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/

  • 相关阅读:
    MySQL数据库操作(4)表约束
    通过C学Python(3)列表的常用方法
    MySQL数据库操作(2)基本操作
    通过C学Python(1)关于语言、数值类型和变量
    通过C学Python(2)序列类型
    MySQL数据库操作(1)用户与权限
    一个文章单词分析作业
    pyCharm的几个配置
    MySQL数据库操作(3)表结构操作
    shell脚本中的for循环和while循环
  • 原文地址:https://www.cnblogs.com/plan123/p/5609833.html
Copyright © 2020-2023  润新知