zoukankan      html  css  js  c++  java
  • Bean作用域

    Spring定义了四种作用域

    1,单例Singleton   整个应用中这个bean只有一个实例

    2,原型prototype   每次注入,或者使用应用上下文获取的时候,都会创建一个新的Bean

    3,会话Session     Web中,每一个会话创建一个实例

    4,请求Request     Web中,每一次请求创建一个实例

    单例是一个默认的作用域。

    要使用其他的作用域,使用@Scope注解,这个注解和@component以及@Bean注解一起使用,来决定定义的Bean的作用域

    1,prorotype作用域

    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

    使用常量更加安全,或者直接@Scope(“prototype”)也是可以的。

    使用xml配置:<bean id="" class="" scope=“prototype”/>

    2,会话和请求作用域

    在web中,我们希望针对某一个会话或者某一个请求指定一个新的实例,这里就会用到会话和请求作用域。

    但是如果将一个会话/请求作用域的Bean注入到单例的作用域会存在问题。

    对于单例作用域,会在Spring上下文加载的时候称将建,此时没有会话的话会话作用域不存在,无法注入,我们希望的是对于每个会话向单例作用域 bean注入不同的bean。这里需要使用代理。当真正调用代理的时候,代理会把方法分配给具体的会话作用域的bean实例、

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

    如果代理的是类 proxyMode = ScopedProxyMode.TARGET_CLASS

    <bean id=""

              class=""

              scope="session">

      <aop:scope-proxy  proxy-target-class=”false“/>

    </bean>

    xml配置,默认是class的,如果是接口,就加上proxy-target-class=“fasse”

  • 相关阅读:
    Java中equals和==的区别
    Golang 中的 defer 关键字
    浅拷贝与深拷贝
    svn 忽略某些文件夹或者文件类型
    使用 nvm 管理 nodejs 版本
    数据库索引
    解决 vscode 安装 golang 环境出现 connection failed 的情况
    TSQL 如何批量修改/转移大数据量数据.
    从别人那儿陶的一个配置文件处理方法.
    分析sqlserver查询计划
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7243280.html
Copyright © 2011-2022 走看看