b2c信息网

您现在的位置是:首页 > 金融新闻 > 正文

金融新闻

spring作用域(spring作用域注解)

hacker2022-07-13 03:04:36金融新闻85
本文目录一览:1、springbean作用域怎么选择2、

本文目录一览:

spring bean作用域怎么选择

singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring

IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的

请求,只要id与该Bean定义相匹配,则只会返回该Bean的同一实例。值得强调的是singleton作用域是Spring中的缺省作用域。

prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean

()方法)时都会创建一个新的Bean实例。根据经验,对有状态的Bean应使用prototype作用域,而对无状态的Bean则应该使用singleton作用

域。

对于具有prototype作用域的Bean,有一点很重要,即Spring不能对该Bean的整个生命周期负责。具有prototype作用域的Bean创建后交由调

用者负责销毁对象回收资源。

简单的说:

singleton

只有一个实例,也即是单例模式。

prototype访问一次创建一个实例,相当于new。

应用场合:

1.需要回收重要资源(数据库连接等)的事宜配置为singleton,如果配置为prototype需要应用确保资源正常回收。

2.有状态的Bean配置成singleton会引发未知问题,可以考虑配置为prototype。

spring bean的作用域是什么?

spring起初的版本只有singleton,也就是是否是单例模式。

作用域包括:singleton全局只有一个实例:prototype,每次调用产生一个新的实例,在web使用的时候还有三个作用域,但是必须在web.xml中注册一个Request Context Listener,目的是为了设置次请求开始和结束都可以使spring得到相应的事件。

request,每次请求产生一个beansession。每个用户session可以产生一个新的bean,不同用户之间的bean互相不影响globalSession。

扩展资料:

作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构

spring配置文件中能够用到的bean的作用域都有哪些

singleton作用域:当把一个bean定义设置为singleton作用域是,spring

ioc容器中只会存在一个共享的bean实例,并且所有对bean的

请求,只要id与该bean定义相匹配,则只会返回该bean的同一实例。值得强调的是singleton作用域是spring中的缺省作用域。

prototype作用域:prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getbean

()方法)时都会创建一个新的bean实例。根据经验,对有状态的bean应使用prototype作用域,而对无状态的bean则应该使用singleton作用

域。

对于具有prototype作用域的bean,有一点很重要,即spring不能对该bean的整个生命周期负责。具有prototype作用域的bean创建后交由调

用者负责销毁对象回收资源。

简单的说:

singleton

只有一个实例,也即是单例模式。

prototype访问一次创建一个实例,相当于new。

应用场合:

1.需要回收重要资源(数据库连接等)的事宜配置为singleton,如果配置为prototype需要应用确保资源正常回收。

2.有状态的bean配置成singleton会引发未知问题,可以考虑配置为prototype。

spring bean的作用域之间有什么区别

常用的spring bean的作用于scope,单例、原型、session、request

单例和原型区别就是,单例在整个springapplicationcontext里面只有这一个,其他任何bean在调用这个bean的时候都是这一个;原型就是每次调用或者说装配的时候,都会新生成一个bean。

session和request的区别,每个session里面用的都是一个bean,每个request里面都是用一个bean

spring的bean作用域有几种,开发中需要注意什么?

Spring中Bean的五个作用域

当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

曾经面试的时候有面试官问我spring的controller是单例还是多例,结果

我傻逼的回答当然是多例,要不然controller类中的非静态变量如何保证是线程安全的,这样想起似乎是对的,但是不知道(主要是我没看过

spring的源码,不知道真正的内在意图)为什么spring的controller是单例的。

先看看spring的bean作用域有几种,分别有啥不同。

spring bean作用域有以下5个:

singleton:单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理;

prototype:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;

====下面是在web项目下才用到的===

request:搞web的大家都应该明白request的域了吧,就是每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听

session:每次会话,同上

global session:全局的web域,类似于servlet中的application

好了,上面都说了spring的controller默认是单例,那很自然就是singleton了。

再看一个例子,看看单例会不会有我说的那种问题(就是类中定义的非静态变量线程安全问题),当然下面这个例子我是实验过的, 要不然也不敢发出来

为什么spring要默认是单例呢?原因有二:

1、为了性能。

2、不需要多例。

1、这个不用废话了,单例不用每次都new,当然快了。

2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。

 我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。

 因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:

默认单例的

1|2

package

com.lavasoft.demo.web.controller.lsh.ch5;

import

org.springframework.context.annotation.Scope;

import

org.springframework.stereotype.Controller;

import

org.springframework.ui.ModelMap;

import

org.springframework.web.bind.annotation.RequestMapping;

/**

* Created by Administrator on 14-4-9.

*

* @author leizhimin 14-4-9 上午10:55

*/

@Controller

@RequestMapping("/demo/lsh/ch5")

public

class MultViewController {

privateintindex =

0;         //非静态

   @RequestMapping("/show")

   publicStringtoShow(ModelMap model) {

       System.out.println(++i);

       return"/lsh/ch5/show";

   }

   @RequestMapping("/test")

   publicStringtest() {

       System.out.println(++i);

       return"/lsh/ch5/test";

   }

}

改为多例的(就是在class上面加一个@Scope("request")):

1 | 1

从此可见,单例是不安全的,会导致属性重复使用。

最佳实践:

1、不要在controller中定义成员变量。

2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。

解释spring支持的几种bean的作用域

Spring 框架支持以下五种 bean 的作用域:

singleton : bean在每个Spring ioc 容器中只有一个实例。 

prototype:一个bean的定义可以有多个实例。 

request:每次http请求都会创建一个bean,该作用域仅在基于web 的Spring ApplicationContext情形下有效。 

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

global-session:在一个全局的HTTP Session中,一个bean定义对应 一个实例。该作用域仅在基于web的SpringApplicationContext情形下有效。

缺省的 Spring bean 的作用域是 Singleton

学习java,就来北京尚学堂!

发表评论

评论列表

  • 澄萌做啡(2022-07-13 05:18:22)回复取消回复

    连接等)的事宜配置为singleton,如果配置为prototype需要应用确保资源正常回收。2.有状态的bean配置成singleton会引发未知问题,可以考虑配置为prototype。spring bean的作用域之间有什么区别常用的sprin

  • 边侣方且(2022-07-13 09:10:00)回复取消回复

    这一个,其他任何bean在调用这个bean的时候都是这一个;原型就是每次调用或者说装配的时候,都会新生成一个bean。session和request的区别,每个session里面用的都是一个be

  • 酒奴殊姿(2022-07-13 08:28:38)回复取消回复

    how")   publicStringtoShow(ModelMap model) {       System.out.println(++i);       return"/lsh/ch5/show";   }

  • 慵吋饮湿(2022-07-13 14:05:29)回复取消回复

    eton作用域是,springioc容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回该bean的同一实例。值得强调的是singleton作用域是spring中的缺省作用域。prototype作用域:prototype作用域的bea

  • 辞眸葵袖(2022-07-13 10:50:52)回复取消回复

    ean的定义可以有多个实例。 request:每次http请求都会创建一个bean,该作用域仅在基于web 的Spring ApplicationContext情形下有效。 session:在一个HTTP Session中,一个bean定义对应一个实例。该 作用域仅在基