gpt4 book ai didi

java - Spring 4.0 : Resolve Type of GenericDao

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:01 25 4
gpt4 key购买 nike

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

Spring 3.2

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

@Bean
public GenericDaoImpl<Permission, Integer> permissionDao() {
return new GenericDaoImpl<Employee, Integer>(Employee.class, sessionFactory);
}

Spring 4.0.0.RELEASE

在 spring 4.0 中,我只需要像这样在服务中 Autowiring 我的 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();
}

所以我尝试用 GenericTypeResolverResolvableType 的静态方法来解析类型。但我无法解析类型。这还是不行吗?

提前致谢。

更新:

private Class<T> getGenericType() {
return (Class<T>) GenericTypeResolver.resolveTypeArgument(GenericDaoImpl.class, GenericDao.class);
}

最佳答案

private Class<T> getGenericType() {
return (Class<T>) GenericTypeResolver.resolveTypeArgument(GenericDaoImpl.class, GenericDao.class);
}

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

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

private Class<T> getGenericType() {
return (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), GenericDao.class);
}

类似的东西。

关于java - Spring 4.0 : Resolve Type of GenericDao,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21432483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com