由于遗留问题和其他原因,我无法使用 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/