spring默认为单例模式

这两天看到一个bug,记录下。

在获取任务的时候,本来任务不是由这个柜员领取的,但是最后跑到那个柜员下面去了。

查看日志,发现两个任务的领取操作很近,日志是穿插着打的。

后来经人指点,说spring初始化bean默认是单实例模式,也就是说这个类的私有属性被后来的调用给改掉了。导致在领取任务的时候 第一个调用的领任务的类的私有变量就变为第二次调用的任务的。所以领串了。这样第二个调用也会随之报错。

这个bug解决的话两个方法。

1:去掉这个私有变量,直接在方法里面初始化。

2.修改spring 初始化这个类,不要使用单例模式。

<bean id="user" class="..." singleton="false"/> 如果不写,就是默认值true。

时间: 2024-10-14 15:01:00

spring默认为单例模式的相关文章

修改Spring默认的单例模式

背景 在我们的项目中,通过Spring来管理业务逻辑Bean,但是Spring Bean的作用域默认是单例,而我们的业务逻辑Bean不是线程安全的,所以需要将Spring Bean改为多例模式. 分析 为单个Bean设置单例或者多例,可以通过设置singleton属性,见以下代码: <bean id="page" class="com.daks.action.LoginAction" singleton="false"/> 但是我们没

spring源码剖析(二)Spring默认标签解析及注册实现

在使用spring的时候,我也经常会使用到bean标签,beans标签,import标签,aop标签等. 下面主要为读者介绍spring的默认的自带标签的解析流程. 验证模式(DTD&XSD) dtd基本已被淘汰,现在spring的验证模式基本都是采用xsd文件作为xml文档的验证模式,通过xsd文件可以检查该xml是否符合规范,是否有效.在使用xsd文件对xml文档进行校验的时候,除了要名称空间外(xmlns="http://www.springframework.org/schema

对spring默认的单列模式的理解

我想大部分朋友对spring的单例模式都比较了解.什么叫单例模式呢,顾名思义就是不管有多少个请求,都只生成一个实例. 比如在spring中a,b请求都在调用相同的bean ,他们都是调用的同一个bean,而不会为这两个请求都分配一个不同的实例.那么两个请求都调用的同一个实例,那么就容易 出现同步问题.这个同步问题主要出现在该实例的各种变量上.当我们a请求调用方法A,对变量a进行操作,b请求调用方法B,对变量a进行操作.这样就会出现两个同时对a进行 操作.就会产生同步的问题.所以为了避免出现这种同

Spring基础知识小结

Spring学习笔记 第一章 初识Spring Spring是轻量级的JAVA EE框架.Spring以IOC/DI.AOP为核心思想.其中,IOC是指控制反转或者反向 控制,AOP是指切面编程.在Spring框架中,我们通过配置来创建类的对象,由Spring在运行阶段实例 化,组装对象,这叫控制反转:在执行一段代码之前或者之后或者同时,执行另一代段码,使程序更加 灵活,扩展性更好,这叫切面编程. 控制反转 既然有反转,那么自然会有与之对应的"正转".例如class A中有一个依赖类c

Spring定义Bean的两种方式:和@Bean

前言:    Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. 今天通过Spring官方文档来了解下,如何生成bean,如何使用呢? 1.通过XML的方式来生成一个bean    最简单也是最原始的一种方式,通过XML来定义一个bean,我们来看下其过程 1)创建entity,命名为Student @Data@AllArgsConstructor@NoArgsCon

[多线程] Web 项目中,少有涉及到的一次多线程编程的经验

如今框架横行,Spring 已经是非常成熟的容器体系,我们在日常开发 JavaWeb 的工作中,大多已经不需要考虑多线程的问题,这些问题都已经在Spring容器中实现,框架的意义就是让程序员们可以专注于逻辑的实现.然而这种编程工作是非常无趣无味的,如果长期从事这个工作,技术不一定见长,业务知识一定很熟悉!= =但说实在的,我并不喜欢这类工作,因为这种工作大多情况下知识对代码的简单复制,或是简单的一些编写,并没有什么真正的创造性,不会给人成就感. 需求背景 我们的项目,是 Mysql+Elasti

框架音频整理513

  框架音频整理: 1 .Strtus工作原理: (1)Strtus本身是一个mvc框架,对底层的servlet进行了封装.Struts的前端是一个核心控制器.叫做StrutsPrepareAndExecuteFilter, (2)这个核心控制器StrutsPrepareAndExecuteFilter是配置在web.xml文件中的,配置的所有请求都会通过web容器进入到strtus框架, (3)从前端发来的请求request,request进来之后会调用ActionProxy(控制器的代理类)

Spring单例模式与线程安全

问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存在这样的问题了. Spring 单例模式与线程安全 Spring 框架里的 bean ,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类.

转-Spring单例模式与线程安全

问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存在这样的问题了. Spring单例模式与线程安全 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方.单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 当多用户