HibernateTemplate 源码分析 之模板模式(一)
HibernateTemplate 从名成上看,其采用了设计模式中的模板模式。
看源码分析之如下:
1.模板方法定义:
根据个人理解,大意就是,对于一系列过程相似的操作,定义模板,只需实现不同的部分。
对于save(o),save(name,o)等一系列方法,过程都是相似的。不同的只是保存时的实现。故对于相似的部分,用模板executeWithNativeSession()方法实现。而对于不同的部分,则分别实现并且作为回调方法,以参数的形式传入模板方法executeWithNativeSession(Callbak).这样当模板方法执行时,可以调用Callbak的方法。
其中回调方法应该实现某个接口,以保证其有相同名称的方法。
注意点是:模板方法的参数是一个回调接口,模板方法内部需要调用该回调接口的方法。
2.源码概况:
public Serializable save(final Object entity) throws DataAccessException {
return executeWithNativeSession(new HibernateCallback<Serializable>() {
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);
}
});
}
public <T> T executeWithNativeSession(HibernateCallback<T> action) {
return doExecute(action, false, true);
}