spring的例子jpetstore的dao使用了SqlMapClientFactoryBean实现了,DAO的单例
如果我别的部分不动
只是将数据库访问换成JDBC
如何实现DAO的单例呢
好像SPRING没提供JDBC的DAO的单例啊,我现在软件跟踪显示DAO被生成了多个,求解..
dataAccessContext-local.xml:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}">
<property name="jdbcUrl" value="${jdbc.url}">
<property name="user" value="${jdbc.username}">
<property name="password" value="${jdbc.password}">
<property name="acquireIncrement" value="1">
<property name="maxPoolSize" value="500">
<property name="minPoolSize" value="10">
<property name="initialPoolSize" value="10">
<property name="maxIdleTime" value="20">
<property name="acquireRetryAttempts" value="3">
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource">
</bean>
<bean id="customerDao" class="cn.co.unicom.crm.dao.CustomerDao">
<property name="dataSource" ref="dataSource">
</bean>
applicationContext.xml:
<aop:config>
<aop:advisor pointcut="execution(* ..ilogic..*(..))" <br=""> advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="create*" <br=""> rollback-for="cn.co.unicom.framework.exception.CrmException" />
<tx:method name="store*" <br=""> rollback-for="cn.co.unicom.framework.exception.CrmException" />
<tx:method name="drop*" <br=""> rollback-for="cn.co.unicom.framework.exception.CrmException" />
<tx:method name="find*" read-only="true">
</tx:attributes>
</tx:advice>
<bean id="dbSearchBusiness" class="cn.co.unicom.crm.logic.DBSearchBusiness">
<property name="customerDao" ref="customerDao">
</bean>
问题补充:
我的代码只是换了jdbc
但是测试软件显示,没实现真正意义的单根
出现了如图的现象
这样对象很多,给服务造成了很大的压力
问题补充:
public class BaseDao extends JdbcDaoSupport {
}
public interface IBusinessDao {
abstract List<business> selectBusiness() throws CrmException;
}
public class BusinessDao extends BaseDao implements IBusinessDao {
public static final String SELECT_BUSINESS_SQL =
"SELECT b.business_id," +
" b.business_name " +
" FROM md_business b";
/* (non-Javadoc)
* @see cn.co.unicom.crm.dao.IBusinessDao#selectBusiness()
*/
public List<business> selectBusiness() throws CrmException {
List<business> businessList = new ArrayList<business>();
RowMapper rowMapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Business business = new Business();
business.setBusinessId(rs.getString("business_id"));
business.setBusinessName(rs.getString("business_name"));
return business;
}
};
try {
businessList = getJdbcTemplate().query(SELECT_BUSINESS_SQL,
rowMapper);
} catch (DataAccessException e) {
throw new CrmException(e.getMessage(), e, "E");
}
if (businessList.size() == 0) {
throw new CrmException("ビジネス区分を取得しません。", "W");
}
return businessList;
}
问题补充:
我个人判断原因是SqlMapClientFactoryBean,起了效果
但是JDBC是没有这个factory的
造成的
求解
spring如何实现JDBC的DAO单例
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- catstiger 2008-12-01 08:13关注
两点:
1.单例与否与性能无关,新的JVM对年轻态的对象回收非常高效。
2.图中你画出来的,一个是实例,另一个是经过动态代理的实例,经过代理的那个可能会有很多实例。
结论:你的用法没错,程序也OK,不必担心。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 vs2019中数据导出问题
- ¥20 云服务Linux系统TCP-MSS值修改?
- ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
- ¥20 怎么在stm32门禁成品上增加查询记录功能
- ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
- ¥50 NT4.0系统 STOP:0X0000007B
- ¥15 想问一下stata17中这段代码哪里有问题呀
- ¥15 flink cdc无法实时同步mysql数据
- ¥100 有人会搭建GPT-J-6B框架吗?有偿
- ¥15 求差集那个函数有问题,有无佬可以解决