Spring bean 的作用域

    xiaoxiao2025-07-21  14

    Spring定义了多种作用域

    单例(Singleton):在整个应用中,只创建bean的一个实例原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean的实例会话(Session):在WEB应用中,为每个会话创建一个bean实例请求(Request):在WEB应用中,为每个请求创建一个bean实例

    单例是默认的作用域。选择其他作用域要使用@Scope注解。 声明为原型bean:

    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

    OR

    <bean id="beanDemo" class="..." scope="prototype"> </bean>

    使用会话和请求作用域

    如用户和其购物车bean,购物车bean跟用户的关联性很大,适合使用会话作用域。

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

    OR

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

    scoped-proxy 和 proxyMode功能类似,就是在还没有用户访问的时候(无法注入会话bean实例),会注入会话bean的一个代理。 ScopedProxyMode.INTERFACES 和 proxy-target-class="false" 表明采用基于接口的代理。 请求bean会面临上面同样的装配问题。

    以上内容参考自:《Spring Action》第四版

    最新回复(0)