Being able to define a bean scoped to a HTTP request or Session (or indeed a custom scope of your own devising) is all very well, but one of the main value-adds of the Spring IoC container is that it manages not only the instantiation of your objects (beans), but also the wiring up of collaborators (or dependencies). If you want to inject a (for example) HTTP request scoped bean into another bean, you will need to inject an AOP proxy in place of the scoped bean. That is, you need to inject a proxy object that exposes the same public interface as the scoped object, but that is smart enough to be able to retrieve the real, target object from the relevant scope (for example a HTTP request) and delegate method calls onto the real object.
[Note] Note
You do not need to use the <aop:scoped-proxy/> in conjunction with beans that are scoped as singletons or prototypes. It is an error to try to create a scoped proxy for a singleton bean (and the resulting BeanCreationException will certainly set you straight in this regard).
Let's look at the configuration that is required to effect this; the configuration is not hugely complex (it takes just one line), but it is important to understand the “why” as well as the “how” behind it.
<!-- a HTTP Session-scoped bean exposed as a proxy -->
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<!-- this next element effects the proxying of the surrounding bean -->
<aop:scoped-proxy/>
</bean>
<!-- a singleton-scoped bean injected with a proxy to the above bean -->
<bean id="userService" class="com.foo.SimpleUserService">
<!-- a reference to the proxied 'userPreferences' bean -->
<property name="userPreferences" ref="userPreferences"/>
</bean>
分享到:
相关推荐
总结来说,`Request`和`Session`作用域是Spring Web应用程序中管理Bean生命周期的关键工具。`RequestScope`确保每个HTTP请求都有一个独立的Bean实例,而`SessionScope`则保证在同一个会话期间使用同一个Bean实例,...
本文详细介绍了Spring框架中Bean的几种作用域及其配置方法,包括Singleton、Prototype、Request、Session和Global Session等。每种作用域都有其适用场景,开发者应根据具体的应用需求选择合适的作用域。合理地利用...
在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...
- **Singleton Beans的懒加载**:如果Bean的scope为singleton,并且在XML配置中没有设置`lazy-init="true"`,那么Spring容器在启动时就会实例化这些Bean。 - **Prototype Beans的每次请求创建**:scope为prototype...
Spring bean可以有多种作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。单例bean在整个应用中只有一个实例,而原型bean每次请求都会创建新的实例。其他作用域主要适用于Web...
标题中的“Spring_0600_IOC_Bean_Scope”涉及到的是Spring框架中的核心概念——控制反转(Inversion of Control, 简称IOC)以及Bean的作用域(Scope)。在这个主题下,我们将深入探讨Spring如何通过IOC管理Bean的...
Spring框架提供了多种作用域,例如 singleton、prototype、request、session、globalSession等。 1. singleton:这是默认的作用域,表示每个应用程序中只有一个实例。 2. prototype:表示每次请求都会创建一个新的...
- 示例配置:`<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>` 4. **Session作用域**: - 类似于Request作用域,但Session作用域的Bean在用户的整个HTTP会话期间有效。每个用户会话都...
在 Spring 中,bean 的作用域可以分为五种:singleton、prototype、request、session 和 global session。这五种作用域类型决定了 bean 的实例化和生命周期的管理方式。 1. Singleton 作用域 Singleton 作用域是...
在Spring框架中,Bean的范围(Scope)是控制对象实例化和管理的重要概念。它定义了Bean在应用程序中创建和共享的方式。这篇博客主要探讨了如何通过XML配置和注解的方式来设定Spring Bean的范围。 首先,让我们理解...
默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`AutowireCandidateResolver`和`BeanFactoryAware`接口...
Spring支持单例(singleton)、原型(prototype)、会话(session)和请求(request)等多种作用域。默认情况下,所有bean都是单例的。 4. **@Lazy** `@Lazy`注解允许你标记一个bean为懒加载。这意味着bean只有在...
浅谈Spring学习之request, session与globalSession作用域 在Spring框架中,request、session和globalSession是三个重要的作用域,分别对应着不同的生命周期和应用场景。在本文中,我们将深入探讨这三个作用域的定义...
### Spring入门学习之Bean装配(XML) #### Bean配置项详解 Spring框架的核心功能之一就是管理对象的生命周期,其中Bean装配是实现这一目标的关键技术。在Spring中,Bean配置项是定义Bean的重要组成部分,通过XML...
在Spring框架中,Bean的两种主要作用域是Singleton和Prototype。Singleton Bean表示在整个Spring ...在某些情况下,还可以结合使用`@Scope("request")`或`@Scope("session")`等其他作用域,以满足特定的Web应用需求。
- 例如,可以利用Spring的`scope`属性来控制bean的实例化范围,如`request`, `session`, `prototype`, `singleton`等。 #### 五、示例:配置JSF/Spring项目 为了更好地理解如何配置JSF与Spring的集成,下面提供了...
- Spring支持五种Bean的作用域:singleton(单例)、prototype(原型)、request、session和globalSession。默认是singleton。 - 例如,定义一个prototype作用域的Bean: ```xml <bean id="exampleBean" class=...
3. `scope`:定义Bean的作用范围,可以是`singleton`(单例)、`prototype`(原型)、`request`(Web应用中每个HTTP请求创建一个)、`session`(Web应用中每个HTTP session创建一个)等。默认是`singleton`,意味着...
- 作用域(Scope):还包括请求(Request)、会话(Session)、应用(Application)等Web容器特定的作用域。 4. Spring Bean 的依赖注入 - 构造器注入:通过带有参数的构造函数来设置Bean的依赖。 - setter注入...
- **作用域的影响**:不同作用域(如singleton、prototype、request、session等)的Bean,其生命周期和创建方式都有所不同,需要根据应用场景选择合适的作用域。 - **懒加载**:如果Bean配置为`lazy-init="true"`,...