在spring中,bean有几种作用域?

author author     2023-04-15     791

关键词:

RT

最好是详细点的

1、singleton作用域

当一个bean的作用域设置为singleton,那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。

配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

或者

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

2、prototype

prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个 prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用 bean的后置处理器,该处理器持有要被清除的bean的引用。)

配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

或者

<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

3、request

request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:

request、session、global session使用的时候,首先要在初始化web的web.xml中做如下配置:

如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:

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

如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现:

<web-app>..<filter> <filter-name>requestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class></filter> <filter-mapping> <filter-name>requestContextFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>...</web-app>

接着既可以配置bean的作用域了:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>

4、session

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

配置实例:

和request配置实例的前提一样,配置好web启动文件就可以如下配置:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="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类型来使用。

配置实例:

和request配置实例的前提一样,配置好web启动文件就可以如下配置:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>
参考技术A hibernate 主键生成机制:
<hibernate-mapping>
<class name="com.esoft.guestbook.model.User" table="user" catalog="guestbook">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="45" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="45" not-null="true" />
</property>
</class>
</hibernate-mapping>明白啦?HIBERNATE提供了很多主键生成机制native为自然数也就是我们经常的1。2。3。4。。。。。100。。。的记数方法了
主要在搜索缓存中使用
Spring Bean的作用域:
作用域 描述
singleton 在每个Spring IOC容器中一个Bean定义对应一个对象实例

prototype 一个bean定义对应多个对象实例

request 再一次HTTP请求中,一个bean定义对应一个实例,即每次HTTP请求
将会有各自的bean实例

session 在每一次HTTPSession中,一个bean定义对应一个实例。该作用域仅在基
于web的Spring ApplicationContext情形下有效

global session 在每一次HTTP Session中,一个bean定义对应一个实例。该作用域仅使用
portlet context的时候有效

spring支持的几种bean的作用域

Spring容器中的bean可以分为5个范围:(1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。(2)prototype:为每一个bean请求提供一个实例。(3)request 查看详情

spring装配bean有几种方式?

一前言在XML中进行显式配置。在Java中进行显式配置。隐式的bean发现机制和自动装配关于xml配置不会在本篇说明,有兴趣的读者可以自行了解学习;知识追寻者(Inheritingthespiritofopensource,Spreadingtechnologyknowledge;)二自动装配bean自动装... 查看详情

spring中的scope配置和@scope注解

Scope,也称作用域,在SpringIoC容器是指其创建的Bean对象相对于其他Bean对象的请求可见范围。在SpringIoC容器中具有以下几种作用域:基本作用域(singleton、prototype),Web作用域(reqeust、session、globalsession),自定义作用域。 1... 查看详情

spring中bean的作用域

Spring中bean的作用域可以在xml配置文件(一般叫bean.xml或ApplicationContext.xml)中通过scope属性进行指定。 在Spring中,bean对象可以有多种作用域   singletion默认的,每个IOC容器只创建一个Bean实例   prototype每次... 查看详情

spring实战-bean作用域

Spring定义了多种域单例(Singleton):在整个应用中,只有一个实例原型(Prototype):每次注入或者通过Spring应用上线文获取时,都创建一个bean实例会话(Session):在web应用中,为每个会话创建一个bean.使用场景:购物车请求(Re... 查看详情

spring——bean的作用域

Spring中Bean的作用域有五种,分别是singleton、prototype、request、session、globalSession。其中request、session、globalSession这三个作用域只有在web开发中才会使用到。当在Spring中定义一个bean时,你必须声明该bean的作用域的选项,若没有声明... 查看详情

java开发需要学什么!在java中创建线程有几种方法

SpirngIOC1.Spring框架2.SpringIOC容器Bean对象实例化模拟3.SpringIOC配置文件加载4.SpringIOC容器Bean对象实例化5.SpringIOC注入6.SpringIOC扫描器7.Bean的作用域与生命周期SpirngAOP核心组件分析SpringIOC+AOP源码笔记1.Spring入门和IOC介绍2.对象依赖3.AO... 查看详情

spring中bean的五个作用域

当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:singleton:单例模式,在整个SpringIoC容器中,使用singleton定义的Bean将只有一个实例prototype:原型模式... 查看详情

聊聊spring中bean的作用域(代码片段)

前言今天分享一下springbean的作用域,理解bean的作用域能够在使用过程中避免一些问题,bean的作用域也是springbean创建过程中一个重要的点。Springbean的作用域类型singleton(单例模式):在整个应用程序的生命周期中,只创建一个B... 查看详情

spring07----bean的作用域

...对象程序设计中一般指对象或变量之间的可见范围。而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围。Spring提供“singleton”和“prototype”两种基本作用域,另外提供“request”、“session”、“globalsession”... 查看详情

spring中bean的作用域(代码片段)

1:和变量一样,bean也有作用域,spring中我们可以为bean指定作用域:<bean id="" class=""  scope="....">2:作用域的种类singleton:单例模式,在spring中只有一个实例 查看详情

spring之bean的作用域与生命周期

在前面博客中提到容器启动获得BeanDefinition对象中有一个scope属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期,了解bean是怎么来的又怎么没的。一、Bean的作用域在Bean容器启动会读取bean的xml配置文件,... 查看详情

spring中bean的五种作用域?spring中的bean是线程安全的吗?

spring中bean的五种作用域当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:singleton:单例模式,在整个SpringIoC容器中,使用singleton定义的Bean将只有一个... 查看详情

springbean作用域

Bean的作用域当在Spring中定义一个bean时,你必须声明该bean的作用域的选项。例如,为了强制Spring在每次需要时都产生一个新的bean实例,你应该声明bean的作用域的属性为prototype。同理,如果你想让Spring在每次需要时都返回同一个b... 查看详情

spring中bean的作用域

   在Spring中,那些组成应用程序的主体及由SpringIoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义... 查看详情

spring之bean的作用域

...tingthespiritofopensource,Spreadingtechnologyknowledge;)二bean的作用域spring定义了多种bean的作用域,常用的4种如下:单例(Singleton):在整个应用中,只创建bean的一个实例。原型(Prototype):每次注入或者通过Spring应用上下文获 查看详情

spring框架学习----bean作用域(代码片段)

文章目录Spring框架学习(六)----Bean作用域一、singleton(单例模式)二、protoType(原型模式)Spring框架学习(六)----Bean作用域  经过前面的学习,我们可以知道bean是存在作用域的。  从spring的官方文档中发现sp... 查看详情

详解spring中bean的作用域与生命周期(代码片段)

摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我就来和大家讲一... 查看详情