Background:
- HibernateTemplate開發dao層。
- 每個業務對象都具有CRUD操作
最初實現
最初爲每個業務對象開發相應的DaoImpl,自然出現大量重複代碼,想要抽取到一個BaseDao中,以實現代碼重用性和整潔度
實現思路
每個業務對象DaoImpl的不同之處唯在於其業務對象,比如,查詢Customer時,就傳入Customer.class 。完成向上抽取,最好的辦法就是創建泛型父類,傳入的業務對象的類對象由運行時判斷。
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class clazz;//用於接收運行期泛型類型
public BaseDaoImpl() {
//此處this是BaseDao子類構造調用,獲得當前類型的帶有泛型類型的父類
ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
//獲得運行期的泛型類型
clazz = (Class) ptClass.getActualTypeArguments()[0];
}