首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring4.0:解决GenericDao类型

Spring4.0:解决GenericDao类型
EN

Stack Overflow用户
提问于 2014-01-29 13:26:39
回答 1查看 3.1K关注 0票数 4

我将Spring环境更新为4.0.0.RELEASE,在阅读了本文(https://spring.io/blog/2013/12/03/spring-framework-4-0-and-java-generics)之后,我尝试使用新的泛型支持来自动创建GenericDAO。

Spring3.2

在Spring3.2环境中,我为每个DAO实例创建了一个单独的bean,并将类作为参数传递给构造函数。这是因为如我所知,不可能在运行时解析泛型类型。

代码语言:javascript
复制
@Bean
public GenericDaoImpl<Permission, Integer> permissionDao() {
    return new GenericDaoImpl<Employee, Integer>(Employee.class, sessionFactory); 
}

Spring 4.0.

使用Spring4.0,我只需在服务中自动测试我的GenericDAO,比如:

代码语言:javascript
复制
@Autowired private GenericDaoImpl<Employee, Integer> employeeDao;

在GenericDAOImpl内部:

代码语言:javascript
复制
@Repository
public class GenericDaoImpl<T, PK extends Serializable> implements GenericDao<T, Serializable> {

        @Autowired
        private SessionFactory sessionFactory;
        private Class<?> genericType;

这个解决方案要简单得多,并且对我的大多数DAO方法都是有效的。但是对于其中的几个,我需要知道我的GenericDAO实例有哪种类型。

代码语言:javascript
复制
@Override
public List<T> findAll() {
    return getCurrentSession().createQuery("FROM " + getGenericType().getName()).list();
}

因此,我尝试使用GenericTypeResolverResolvableType的静态方法来解析类型。但我无法解决这类问题。这还不可能吗?

提前谢谢。

更新:

代码语言:javascript
复制
private Class<T> getGenericType() {
    return (Class<T>) GenericTypeResolver.resolveTypeArgument(GenericDaoImpl.class, GenericDao.class);
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-29 14:02:58

代码语言:javascript
复制
private Class<T> getGenericType() {
    return (Class<T>) GenericTypeResolver.resolveTypeArgument(GenericDaoImpl.class, GenericDao.class);
}

您的GenericDaoImpl没有关联的类型,因为它是泛型的,它不会解析为正确的类型。

与其传入GenericDaoImpl.class,不如调用getClass()并传入它,因为您想知道当前实例的类型

代码语言:javascript
复制
private Class<T> getGenericType() {
    return (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), GenericDao.class);
}

差不多吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21432483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档