`

bean的scope属性

阅读更多

.singleton (默认属性)

Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引用返回给调用者,spring IOC继续对这些Bean进行后续的生命管理。BeanFactory只管理一个共享的实例。所有对这个特定bean的实例请求,都导致返回这个唯一bean实例的引用。

即每次拿到的对象都是引用的同一个地址的对象。当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。


2.prototype

Spring将Bean返回给调用者,调用者负责Bean后续生命的管理,Spring不再管理这些Bean的生命周期。
每次对这个bean的实例请求都会导致一个新的实例的创建。当用户需要不受其他用户对象影响的对象或有类似的需求时,这是一个较理想的解决办法。


即每次拿到的对象都是引用的不同地址的对象。相当于一个new的操作。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责


以下的3种scope都使用的较少,类似于J2EE里面的request和session。在使用SpringMVC是可能会用到。


3.request

‍request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例: request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:

‍<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>



4.session


‍session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效



5.global session

‍global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用



对于Action来说需要指明scope=”prototype”或singleton=”false”,因为Action是线程不安全的,可能会导致跳转的页面错误。

对于带有数据成员变量的类需要指明scope=”prototype”或singleton=”false”。不然这样会导致多个线程共用同一个成员变量。


有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用singleton作用域。

分享到:
评论

相关推荐

    07-IoC配置-scope属性

    scope属性 名称: scope类型:属性 归属: bean标签 作用:定义bean的作用范围 格式: &lt;bean scope=“singleton"&gt;&lt;/bean&gt; 取值: singleton:设定创建出的对象保存在spring容器中,是一个单例的对象(bean默认是单例...

    在 JSP/Servlet 中使用 Bean 自动属性填充机制

    这里的`&lt;jsp:useBean&gt;`标签创建了一个名为`myBean`的Bean实例,`class`属性指定了Bean的完整类名,`scope`属性定义了Bean的作用范围(例如,session或request)。`&lt;jsp:setProperty&gt;`标签的`name`属性引用了Bean的ID...

    Spring IOC Bean标签属性介绍(教学视频+源代码)

    Spring IOC Bean标签属性介绍 0.Bean标签属性介绍 1.0 新建一个Maven工程 1.1 pom.xml 1.2 实体类JavaBean 1.2.1 User类 1.3 当Scope="singleton"时 1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope=...

    struts bean标签

    - `&lt;bean:scope&gt;`:获取特定作用域内的Bean,如session或request。 4. **实际应用示例** - 在用户登录场景中,我们可以用`&lt;bean:define&gt;`来创建用户对象,然后用`&lt;bean:write&gt;`输出用户名和密码,`&lt;bean:include&gt;...

    JSF 资源 managed bean 课件

    - **使用EL表达式引用Bean**:通过`#{beanName.propertyName}`语法可以在JSF页面中引用Bean的属性。 - **数据绑定**:可以直接将表单字段与Bean的属性进行绑定,从而简化数据处理流程。 - **事件监听**:可以定义...

    spring bean的生命周期

    如果在XML配置中指定了`class`属性,Spring将根据该属性创建Bean。 - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)和集合注入(list,map,props,set)。 - **初始化回调**:Spring支持...

    详解Spring中Bean的生命周期和作用域及实现方式

    在配置Bean时,可以使用scope参数来指定Bean的作用域。 三、Bean的实现方式 Spring框架提供了多种方式来实现Bean,例如使用XML配置文件、使用Annotation配置等。 1. 使用XML配置文件:可以在XML配置文件中配置...

    jsp标准动作

    * scope 属性:指定了 Bean 的作用域,包括 page、session、request、application 四种。 * type 属性:指定了引用此对象的变量的类型。 * beanName 属性:指定了串行化 Bean 的名称。 jsp 标准动作提供了一种灵活...

    Spring之scope讲解测试示例代码

    在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...

    spring bean life cycle

    `scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活运用,能帮助我们更好地控制Bean的行为,实现更高效、更可控的依赖管理和资源管理。通过...

    Spring Bean生命周期&BeanDefinitions1

    Spring的BeanDefinition是用来存储Bean的配置信息,包括Bean的类名、作用域、属性值、依赖的其他Bean、是否为单例、是否延迟加载等。这些信息在容器启动时解析并转化为BeanDefinition对象,后续的Bean实例化和管理都...

    spring入门学习-3、Bean装配(XML).pdf

    &lt;bean id="beanScope" class="com.base.java.test.BeanScope" scope="singleton"&gt;&lt;/bean&gt; ``` 2. **Prototype**:原型模式,对于每一个对该Bean的请求,Spring IoC容器都会创建一个新的实例。 ```xml &lt;bean id...

    struts-bean标签

    1. `&lt;bean:define&gt;`:此标签用于在JSP页面中定义一个变量,并将它与JavaBean或其属性关联。`id`属性用于指定变量名,`name`用来指定JSP范围内已经存在的JavaBean,`property`用于访问JavaBean的特定属性,而`value`...

    spring学习笔记(五)

    在XML配置中,我们可以使用`&lt;bean&gt;`元素的`scope`属性,如下所示: ```xml &lt;bean id="myBean" class="com.example.MyClass" scope="prototype"/&gt; ``` 在Java配置中,我们可以使用`@Scope`注解,如下所示: ```java @...

    SSH笔记-bean的作用域

    例如,单例Bean的初始化和销毁方法可以通过`init-method`和`destroy-method`属性指定,而原型Bean则需要通过编程方式管理这些生命周期方法。 在实际开发中,理解并正确使用Bean的作用域对于优化应用性能、控制并发...

    Java开发学习(三)----Bean基础配置及其作用范围.doc

    - 当需要控制bean的实例化策略时,通过scope属性来设置bean的作用范围。 - 依赖注入是Spring的核心特性,正确配置依赖关系能提高代码的可测试性和可维护性。 了解并掌握这些基本配置和作用范围,对理解Spring的...

    JAVA bean 技术.JSP

    这里的`id`属性定义了Bean的引用名称,`class`属性指定了Bean的全限定类名,`scope`属性定义了Bean的生存范围,它可以是`page`、`request`、`session`或`application`之一: - `page`:Bean只在当前JSP页面中有效。...

    Spring Bean 加载顺序 .

    如果Bean定义了初始化回调方法,如`init-method`属性指定的方法,Spring会在初始化后执行这个方法。 9. **Bean的销毁**: 对于Singleton Bean,Spring在容器关闭时会调用`@PreDestroy`注解的方法和实现...

    粗略实现spring创建bean

    - 属性注入:通过直接设置Bean的属性值。 - 方法注入:通过调用Bean的方法来注入依赖。 5. Spring Bean 的扩展功能 - AOP(面向切面编程):Spring提供了一套AOP框架,可以实现切面、通知、代理等概念,实现代码...

    Spring之核心容器bean

    这里,`myBean`是bean的ID,`com.example.MyClass`是bean对应的类,`name`属性则是bean的一个属性,被注入了值"Example Bean"。 **依赖注入(DI)** Spring的核心特性之一是依赖注入(Dependency Injection,简称DI...

Global site tag (gtag.js) - Google Analytics