谁能读懂下面的代码

beidoutianji 2007-11-08 05:16:42
public PaginatedList queryForPaginatedList(
final String statementName, final Object parameterObject, final int pageSize)
throws DataAccessException {

// Throw exception if lazy loading will not work.
if (this.sqlMapClient instanceof ExtendedSqlMapClient &&
((ExtendedSqlMapClient) this.sqlMapClient).getDelegate().getTxManager() == null) {
throw new InvalidDataAccessApiUsageException(
"SqlMapClient needs to have DataSource to allow for lazy loading" +
" - specify SqlMapClientFactoryBean's 'dataSource' property");
}

return (PaginatedList) execute(new SqlMapClientCallback() {
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
return executor.queryForPaginatedList(statementName, parameterObject, pageSize);
}
});
}

这段代码来源于org.springframework.orm.ibatis的SqlMapClientTemplate这个类
请问:
SqlMapExecutor executor这个对象真正是什么了?如果它还没有被实例化对某对象,下面的return executor.queryForPaginatedList(statementName, parameterObject, pageSize);一定是有错误的,但是这个代码又是对的。
所以,高手们,请问executor在哪里被实例化成什么对象了?
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cl55 2007-11-09
  • 打赏
  • 举报
回复
不客气,相互促进~
beidoutianji 2007-11-09
  • 打赏
  • 举报
回复
谢谢CL
beidoutianji 2007-11-09
  • 打赏
  • 举报
回复
有点绕,不过慢慢就理解了
beidoutianji 2007-11-09
  • 打赏
  • 举报
回复
总结一下:
结合http://topic.csdn.net/u/20071108/14/9d84f344-ba63-4836-983a-2a38b6fae5a0.html?seed=948165263 中的代码

protected SqlMapClientTemplate smcTemplate = this.getSqlMapClientTemplate();

而这个方法指向了SqlMapClientDaoSupport中的getSqlMapClientTemplate()方法,这个方法返回的对象是SqlMapClientTemplate类的实例化对象,而SqlMapClientTemplate类的实例化对象smcTemplate的queryForPaginatedList方法实际上是一个匿名内部类,而这就回到了我在上面提出的问题,呵呵,它的答案就是CL得答案,而session得真正的实例化对象是SqlMapSessionImpl,它是通过Spring框架来做到这一点的,进而,实际上,真正执行的方法是SqlMapSessionImpl.queryForPaginatedList,而它在往下执行就是SqlMapExecutorDelegate.queryForPaginatedList这个方法,它返回的对象是PaginatedDataList,而PaginatedDataList存入数据的方法是sqlMapExecutor.queryForList
cl55 2007-11-08
  • 打赏
  • 举报
回复
SqlMapClientCallback类的实例被创建后直接送给了execute方法,此方法的一点代码如下,楼主一看就明白了。


public Object execute(SqlMapClientCallback action) throws DataAccessException {
SqlMapSession session = this.sqlMapClient.openSession();
......
return action.doInSqlMapClient(session);
}
beidoutianji 2007-11-08
  • 打赏
  • 举报
回复
因为这个是Spring框架里的代码 呵呵 我不知道怎么做了
不过这个问题我已经研究明白了
请参照http://topic.csdn.net/u/20071108/14/9d84f344-ba63-4836-983a-2a38b6fae5a0.html?seed=948165263
谢谢沙盗和阿宝
qybao 2007-11-08
  • 打赏
  • 举报
回复
用一个简单的方法就可以查出executor是哪个类的实例了
System.out.println(executor.getClass());
executor应该是在调用doInSqlMapClient方法前被创建的,自己debug跟踪一下就知道了。
shadao 2007-11-08
  • 打赏
  • 举报
回复
"SqlMapExecutor executor这个对象真正是什么了"

研究spring时 千万别深究这个问题

"所以,高手们,请问executor在哪里被实例化成什么对象了?"
只要org.springframework.orm.ibatis.SqlMapClientTemplate提供了executor的setter方法或者构造时初始化executor
那么spring就可以为所欲为(当然是按着您的配置来)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧