【发布时间】:2014-01-29 13:26:39
【问题描述】:
我将 Spring MVC 环境更新到版本 4.0.0.RELEASE。在阅读了这篇文章 (https://spring.io/blog/2013/12/03/spring-framework-4-0-and-java-generics) 之后,我尝试使用新的泛型支持来自动装配我的 GenericDAO。
春季 3.2
在 Spring 3.2 环境中,我为每个 DAO 实例创建了一个单独的 bean,并将该类作为参数传递给构造函数。这是因为据我所知,无法在运行时解析泛型类型。
@Bean
public GenericDaoImpl<Permission, Integer> permissionDao() {
return new GenericDaoImpl<Employee, Integer>(Employee.class, sessionFactory);
}
春季 4.0.0.RELEASE
在 spring 4.0 中,我只需要在 Service 中自动装配我的 GenericDAO,例如:
@Autowired private GenericDaoImpl<Employee, Integer> employeeDao;
在 GenericDAOImpl 内:
@Repository
public class GenericDaoImpl<T, PK extends Serializable> implements GenericDao<T, Serializable> {
@Autowired
private SessionFactory sessionFactory;
private Class<?> genericType;
此解决方案要简单得多,并且适用于我的大多数 DAO 方法。但是对于其中一些,我需要知道我的 GenericDAO 实例具有哪种类型。
@Override
public List<T> findAll() {
return getCurrentSession().createQuery("FROM " + getGenericType().getName()).list();
}
所以我尝试用GenericTypeResolver和ResolvableType的静态方法来解析类型。但我无法解析类型。这仍然不可能吗?
提前致谢。
更新:
private Class<T> getGenericType() {
return (Class<T>) GenericTypeResolver.resolveTypeArgument(GenericDaoImpl.class, GenericDao.class);
}
【问题讨论】:
-
请添加您尝试过但无法正常工作的代码。
-
我也有同样的问题。你有没有找到解决办法?
-
很遗憾,我仍在使用旧解决方案。
标签: java spring generics spring-mvc autowired