大多數人應該熟悉爲Spring + hibernate製作泛型DAO。該參考文獻不同於http://www.ibm.com/developerworks/java/library/j-genericdao/index.html,但有一個改進,它Single DAO & generic CRUD methods (JPA/Hibernate + Spring)GenericDAO與Guice,玩泛型和參數化類型
這種改善是該類型的檢測,因爲它是不是使用構造函數來告訴它是哪一類的父類的一部分,
public GenericDaoJpaImpl() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass()
.getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperclass
.getActualTypeArguments()[0];
}
然而,這個演員陣容將失敗,Guice。被注入,接口和類需要在模塊中綁定這樣
bind(TestDao.class).to(TestDaoImpl.class);
並通過這樣做的構造招我們GenericDAO不會因爲以下的工作:
getClass().getGenericSuperclass() = java.lang.Class
getClass().getName() = com.gwtplatform.samples.basic.server.dao.TestDaoImpl$$EnhancerByGuice$$5fe0d6fd
相反的是一個Spring + Hibernate的返回
getClass().getGenericSuperclass() = sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
getClass().getName() = com.gwtplatform.samples.basic.server.dao.TestDaoImpl
我只是用我的擴展的DAO超級構造函數了,但還是想獲得的類型,而不是提供它,任何想法?
我這個標記作爲答案,因爲這是獲得類型的一種方式,但對我來說,最後這只是很多代碼,相比之下,提供類型我自己 – javaNoober 2012-01-11 04:22:13