java - 如何让Spring bean扩展一个通用的抽象类?

标签 java spring hibernate spring-data-jpa

由于遗留问题和其他原因,我无法使用 JPA 存储库。所以我正在尝试为一个项目构建类似的东西。 我有类 MyEntityRepo

@Repository
public class MyEntityRepo extends CustomRepository<MyEntity, Integer> {

}

public abstract class CustomRepository<T, ID> {

    private static final Logger LOG =LoggerFactory.getLogger(CustomRepository.class);

    protected SessionFactory sessionFactory;

    private T _clazz;
    private String className;

    public CustomRepository() {             
        String className = _clazz.getClass().getName();
        if (className.contains(".")) {
            className = className.substring(className.lastIndexOf('.') + 1);
        }
        LOG.info("classname:{}", className);
    }
}

但是当我启动项目时,spring 框架无法创建 bean,因为它给出了 NullPointerException,因为 _clazz 字段为空。有人可以解释一下如何实现这一目标吗?

最佳答案

据我了解,主要问题是获取泛型类。

您不需要存储T _clazz;

尝试使用org.springframework.core.GenericTypeResolver

_clazz = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), CustomRepository.class);

the second answer得到逻辑

但实际上 Spring Data 从接口(interface)动态创建代理。请参阅the example

关于java - 如何让Spring bean扩展一个通用的抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45569681/

相关文章:

java - mvn clean install 不起作用

java - json 字符串对象与未知数

Spring测试@Sql不从sql文件中插入数据

java - Hibernate通过非主键获取实体并更新它+ Spring mvc

java - spring-data-jpa 中的 JOIN FETCH 不会获取惰性关联

java - 连接字符串作为 GET/POST 请求的参数

java - Esper 中 OUTPUT WHEN 和 WHERE 的区别

java - Spring /速度/Maven/Tomcat - "requested resource is not available"

spring - Hibernate AnnotationException - Spring 5 和 Hibernate 5 映射实体

java - SQLGrammarException : could not prepare statement]