`
ME-XICAN
  • 浏览: 24020 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring注入单例模式问题

阅读更多

Spring默认单例模式自然不用多说,作为开发人员肯定对“慎用全局变量”这个经典都“耳熟能详”,但是真正在开发中却未必会注意到这个问题,只有真能遇到过才能理解的更深刻。

       前段时间迁移架构,迁移完成后需要把代码结构更改以符合文档需要,其实个人觉得就是为了美观,麻烦的还是开发人员。 下面是迁移后的代码结构:

 	/*原始参数集合*/
	private Map<String, Object> request = new HashMap<String, Object>();
	/*返回值集合*/
	private Map<String, Object> response = new HashMap<String, Object>();
	/*上下文变量集合*/
	private Map<String, Object> processorContext = new HashMap<String, Object>();
	
	public Map<String, Object> process(Map<String, Object> requestMap) {
		logger.info("网银支付入参: " + requestMap);
		request.clear();response.clear();processorContext.clear();
		request.putAll(requestMap);
		before();
		doProcess();
		after();
		
		logger.info("网银支付处理结束,返回参数 " + response);
		return response;
		
	}

其中代码第十行是为了避免全局变量引起的数据混乱问题,所以在每次请求时均clear一下,本以为这样就能保持每个请求的数据的独立性,但是后来测试时发现每次有新的请求进来都会在clear时报空指针,自己远程debug连服务器和测试小妹妹加班debug才发现是每次请求进来时response都为空,但是我在外面直接生成对象了啊,一阵郁闷。后面看了下面的代码才发现是自己不小心把全局变量response给重新赋值了,然后前面有交易失败时直接把response给置为空了。解决办法就是:

response.putAll(reResult);

 而非之前的:

reResult=map.get("reResult");

 bug虽小,我心犹忧!

 

分享到:
评论

相关推荐

    25个经典的Spring面试问答

    Spring框架中的单例Beans是线程安全的么 请举例说明如何在Spring中注入一个Java Collection 如何向Spring Bean中注入一个JavautilProperties 请解释Spring Bean的自动装配 请解释自动装配模式的区别 如何开启基于...

    吴天雄--Spring笔记.doc

    IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性详解(包含单例设计模式),DI详解,Spring的几种注入方式,利用Spring简化Mybatis;第二天内容:AOP(AOP常用概念、Spring的三种aop实现方式、代理...

    Spring.net实战开发

    IObjectFactory接口提供了一个简单而优雅的工厂模式,移除了对单例和一些服务定位stub的必要。允许你将真正的程序逻辑与配置解耦。作为对IObjectFactory 的扩展,IApplicationContext接口也在Spring.Core库中, ...

    Spring面试专题.pdf

    13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean 中注入一个 Java.util.Properties? 16、请解释 Spring Bean 的自动装配? 17...

    Spring面试题.zip

    13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean 中注入一个 Java.util.Properties? 16、请解释 Spring Bean 的自动装配? 17...

    Spring-IOC::label:手写实现了Spring框架的基本功能,存在了注解以及xml配置,并且实现了引用注入等功能,还实现了SpringMVC的简单功能

    xml注入注解注入简单MVC功能注入支持递归注入属性注入引用注入(但未解决循环依赖)注解配置单例以及原型模式切换运用的设计模式工厂设计模式:Spring使用工厂模式通过BeanFactory,ApplicationContext创建bean对象...

    初识Spring

    (1)用无参构造方法创建对象(2)用带参的构造方法创建对象(3)用静态工厂创建对象(4)用非静态工厂创建对象Spring的单例模式和多例模式Spring框架的依赖注入依赖注入简介依赖注入的类型:(1)setter方法注入:...

    spring.doc

    Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype 17 3.4.3 Request 17 3.4.4 Session 18 3.4.5 Global session 18 3.4.6 指定Bean的初始化方法和销毁方法 18 Bean的初始化和销毁拓展: 18...

    设计模式的代码样例

    系统通过spring框架注入的对象默认是单例的 配置文件在系统启动时去远端拉取,在后续使用时不需要再进行创建配置文件实例 实现方式 单例模式的实现通常有两种方式:“饿汉式”和“懒汉式”。 单例模式是将将构造...

    spring1.2学习心得分享

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    Spring入门

    3、 提供单例模式支持,开发人员不再需要自己编写实现代码 4、Spring提供了众多服务。如:事务管理,编程人员不再需要手工控制事务,也不需处理复杂的事务传播 5、 Spring提供的众多辅助类,使用这些类能够加快应用...

    学习SSM源码分析的一次实践,自己实现SSM框架

    在spring中最核心的就是IOC容器,默认采用的是通过单例的模式来进行管理我们注入到Ioc中的bean(当然我们也是可以修改成其他的模式,暂且不讨论),在spring中单例模式是采用注册的方式来实现的单例模式,所以我也是...

    JAVA超全面试突击包-答案讲义

    涵含各种重要的JAVA编程知识点,面试突击专用 内容包括:Spring、SprngBoot、SpringCloud、Redis、MySQL、MyBatis、JVM、多...设计模式:包括常见的设计模式,如单例模式,工厂模式,观察者模式等,以及它们的使用场景

    Spring基础与快速入门

    4 依赖注入:建立对象与对象之间依赖关系的实现,包括接口注入、构造注入、set注入,在Spring中只支持后两种 5 AOP:面向方面编程,我们可以把日志、安全、事务管理等服务(或功能)理解成一个“方面”,那么以前...

    MySSH.rarSSH框架,spring管理sessionFactory

    spring管理sessionFactory,将sessionFactory注入基础类,将基础类设置为单例模式,下载后直接部署使用,根据实体类自行建表

    spring1.1开发理解

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    spring学习心得

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    Spring框架分为哪七大模块

    这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。 2.SpringContext: 构建于Core封装包基础上的Context封装包,提供了...

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    holder”创建单例模式的理解,参考 Spring中单例的概念限于Spring上下文中,遵守约定 内部bean适用于setter注入和构造器注入,内部bean不能被复用 SpEL表达式 3. 高级装配 4 种自动装配 byName, byType, contructor, ...

    Spring面试题

    3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,...

Global site tag (gtag.js) - Google Analytics