以hibernate3 Template为例子;
首先你的代码是反编译的,建议去看spring源码,而不是这个代码;
this$0 = HibernateTemplate.this; //这个就是代表tthis指针; 栈区的第0个就是存的this引用;
Spring提供了一只的DAO抽象:如下所示:
Callback:定义可变行为,即不可预知行为(命令设计模式)
Template:提供模板支持,简化开发
Support:提供对Template的支持,提供一组简便方法,并提供获取Template的方法
在Template定义一些可以模板方法save、update、delete、find;
一些可变操作,如分页查询 必须通过HibernateCallback 回调完成;即HibernateCallback提供给我们一个插入点,在这个点可以实现一些非模板能完成的功能。
[code="java"]
public Serializable save(final Object entity) throws DataAccessException {
return executeWithNativeSession(new HibernateCallback() {
public Serializable doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
return session.save(entity);
}
});
}
public Serializable save(final String entityName, final Object entity) throws DataAccessException {
return executeWithNativeSession(new HibernateCallback<Serializable>() {
public Serializable doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
return session.save(entityName, entity);
}
});
}[/code]
摘了两个方法,不懂的可以问我,其实内部还是通过callback完成的