java - Spring获取泛型类型类

标签 java spring generics

我知道这个问题经常被问到,但我找不到解决方案。 如何在 Spring 注入(inject)存储库中获取通用类型类名?

这是我的基础仓库

public interface UserRepository extends JpaRepository<User, Long>, IUserRepository<User>{
   User findByUsername(String username);
}

这是界面

public interface IUserRepository<T> {
   public List<T> findAllValidEtSiteAndStructure();
}

最后是实现

public class UserRepositoryImpl<T> implements IUserRepository<T> {

@PersistenceContext
private EntityManager em;

private Class< T > type;

@Override
public List<T> findAllValidEtSiteAndStructure() {
    final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    if (authentication instanceof UserAuthentication) {
        final User currentUser = ((UserAuthentication) authentication).getDetails();
        return (List<T>) em.createQuery("FROM " + type.getName()+ " WHERE site=:site AND structure=:structure AND valid=:valid")
                .setParameter("site", currentUser.getInstallation().getSite())
                .setParameter("structure", currentUser.getInstallation().getStructure())
                .setParameter("valid", true)
                .getResultList();
    }
    return null;
}
}

我怎样才能得到type.name? 提前致谢

最佳答案

考虑到您使用的是 Spring Framework,请使用下面的代码片段,我已经测试过它工作正常:

ResolvableType resolvableType = ResolvableType.forClass(UserRepository.class).as(JpaRepository.class);
System.out.println(resolvableType.getGeneric(0));//User
System.out.println(resolvableType.getGeneric(1));//Long

关于java - Spring获取泛型类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202375/

相关文章:

java - 我的代码中的错误导致行计数错误。请指教

java - Spring:如何动态获取bean实现?

C# 泛型 - 数组?

java - 在 Java Spring 中,如何在没有 @KafkaListener 的情况下使用 KafkaTemplate 消费来自 Kafka 的消息? RabbitMQ 类似物

java - 如何在 Java 中使用 Httpunit 发送多部分请求

java - Java 中使用 for 语句的斐波那契数列

java - 为什么 Spring Cloud Stream 应用程序启动项目中没有可用的 websocket 源?

java - Spring外部配置

java - Gson从反射字段类型解析通用列表

delphi - Delphi 中使用泛型的属性