【发布时间】:2020-07-13 20:48:00
【问题描述】:
在我的 JSF 2.3 项目(wildfly 19 app.server)中,我有一个通用 EntityService 类,它采用两个类型参数。 EntityService 类还注入了另一个类 GenericEntityService。 GenericEntityService 是一个@Stateless bean,它使用 EntityManager 来完成真正的工作(查找实体、更新实体、删除实体、插入实体......)
@Dependent
public class EntityService<T, ID> {
@Inject
private GenericEntityService<T, ID> entityService;
private Class<T> entityClass;
@Inject
private void entityClass(InjectionPoint injectionPoint) {
ParameterizedType type = (ParameterizedType) injectionPoint.getType();
Class<T> entityClass = (Class<T>) type.getActualTypeArguments()[0];
this.entityClass = entityClass;
}
public T find(ID id) {
return entityService.find(entityClass, id);
}
public List<T> findAll() {
return entityService.findAll(entityClass);
}
[...]
}
因为 EntityManager 的 find 方法需要类类型作为参数,所以我在 entityClass 方法中注入了一个 InjectionPoint 来获取实际的“实体类类型”并将其作为参数传递给 GenericEntityService 方法。
这种从类型参数中获取类类型的方法有什么问题吗?
【问题讨论】: