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”

 

posted @ 2017-07-27 10:04  Zview  阅读(178)  评论(0编辑  收藏  举报