的parameterizedType,使長話短說,我有這些類如何確定具體類型注入CDI豆
public class BaseController<T extends BaseEntity, ID extends Serializable> implements Serializable {
@Inject
private BaseService<T> service;
private Class<T> persistentClass;
public void init() {
Type arg = ((ParameterizedType) ((Class) getClass().getGenericSuperclass()).getGenericSuperclass()).getActualTypeArguments()[0];
persistentClass = (Class<T>) arg;
}
// Other stuff
}
public interface BaseService<T extends BaseEntity> {
}
public class BaseServiceImpl<T extends BaseEntity> implements BaseService<T>, Serializable {
private Class<T> queryClass;
public BaseServiceImpl(){
// Set the above queryClass through Java Reflection and/or CDI. Stucked here!
}
}
當我繼承了BaseController諸如此類
public class PersonController extends BaseController<Person, Long> {
@Override
@PostConstruct
public void init() {
super.init();
// other stuff
}
}
的對PersistentClass被賦予Person類是正確的,我也想在BaseServiceImpl中確定具體類型類,以在其中設置queryClass變量。我怎樣才能做到這一點?
謝謝。
更新:更多細節,
的BaseController對PersistentClass需要從它創建新實例(persistentClass.newInstance())和一些反思的東西想獲得在JPA實體類中聲明的方法和註釋。
的BaseService需要queryClass(必須是相同的對PersistentClass)來實際委託給基礎DAO層,其又在DAO類簡單地使用它在
entityManager.find(queryClass, id);
和類似的操作。
兩個BaseController和BaseService(和BaseDAO)是大多數實體CRUD頁/操作的通用。
它是什麼,你真的需要知道,爲什麼? – 2012-07-14 15:46:43
@ThorbjørnRavnAndersen增加了更多細節。 – 2012-07-14 16:07:09
@UlukBiy改爲注入工廠? – munyengm 2012-07-14 18:24:11