spring getbean 用单例模式
来源:互联网 发布:js实现div旋转 编辑:程序博客网 时间:2024/04/28 15:11
项目中用到Struts 1.2.9 + Spring 2.5 + hibernate 3.2.5框架
OperateLogService 是一个操作日志的service,里面有个插日志的方法logger,因为这个方法被很多地方调用,
所以我搞了这个OperateLogAddServiceImpl ,加了个静态方法, 然后使用getbean,这样的话调用的地方就不需要注入OperateLogService 这个service
package com.lenovo.platform.operatelog.service.impl;
import com.lenovo.platform.exception.AppTranException;
import com.lenovo.platform.operatelog.service.OperateLogService;
import com.lenovo.platform.security.entity.OperateLog;
import com.lenovo.reconciliation.service.impl.SpringContextUtil;
public class OperateLogAddServiceImpl {
public static void saveOperateLog(OperateLog operateLog) throws AppTranException{
OperateLogService operateLogService = (OperateLogService)SpringContextUtil.getBean("operateLogService");
operateLogService.logger(operateLog);
}
}
结果系统偶发性的出现问题,抛出下列错误信息,一重启tomcat,问题就没有了,但是过段时间又会重现,并且问题只在生产平台发生,本机无问题,从错误信息来看,说是什么事务方面的问题,当时以为是数据源或者事务什么的问题
Pre-bound JDBC Connection found! HibernateTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single HibernateTransactionManager for all transactions on a single DataSource, no matter whether Hibernate or JDBC access
但是实际上是getbean的问题,将获取service实例改成下面单例模式,问题随即解决,问题虽然解决,但是还是不太明白原因,尤其是抛出来的错误跟问题有点不搭边
package com.lenovo.platform.operatelog.service.impl;
import com.lenovo.platform.exception.AppTranException;
import com.lenovo.platform.operatelog.service.OperateLogService;
import com.lenovo.platform.security.entity.OperateLog;
import com.lenovo.reconciliation.service.impl.SpringContextUtil;
public class OperateLogAddServiceImpl {
private static OperateLogService operateLogService = null;
synchronized private static OperateLogService getOperateLogService(){
if(operateLogService == null){
operateLogService = (OperateLogService)SpringContextUtil.getBean("operateLogService");
}
return operateLogService;
}
public static void saveOperateLog(OperateLog operateLog) throws AppTranException{
OperateLogService operateLogService = getOperateLogService();
operateLogService.logger(operateLog);
}
}
- spring getbean 用单例模式
- spring getBean
- Spring中的getBean
- spring ApplicationContext#getBean 方法
- spring getbean 方法分析
- Spring BeanFactory.getBean()流程
- Spring BeanFactory getBean 源码剖析
- Spring ClassPathXmlApplicationContext getBean创建实例
- Spring之new和getBean()
- spring源码之 getBean流程图
- getBean
- getBean
- [Spring]Spring Bean的初始化 ---- getBean方法
- 需要注意的Spring中的getBean方法
- Spring的ApplicationContext.getBean()的具体实现
- spring源码研究——getBean
- Spring源码由浅入深系列五 GetBean
- spring学习-分步getBean方法(1)
- 网络通信协议层的七个部分
- HTML5的明天,局部有小雨
- 瑞星个人防火墙2012
- 16周:玩字符串
- sqllink.cs c#数据库操作类
- spring getbean 用单例模式
- 韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理
- 字符串
- 强制删除 OpenStack Nova (Essex) 实例
- 小米的成功你学不会
- 面向对象
- Windows server 2008设置远程桌面连接的详细步骤(图文教程)
- Excel批量转为Html,Html转换成Excel
- 明年一月恢复中俄韩三国陆海联运航线运营