测试 DAO 时出错:sun.reflect.generics.reflectiveObjects.TypeVariableImpl 无法转换为 java.lang.Class

2024-02-12

我对 Spring + Hibernate 非常陌生,我正在运行测试来查看我的 DAO 是否正常工作。我收到以下错误,在谷歌搜索时会产生很多不同的答案(主要是拼写错误,我已经检查过)。我希望你能帮我解决这个问题:

java.lang.IllegalStateException: Failed to load ApplicationContext
        at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:220)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
        at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71)
        at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199)
        at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nominationDao' defined in file [C:\IdeaProjects\Projects\branch\dev\test-dataacess\target\classes\com\dev\test\data\dao\hibernate\NominationHibernateDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.dev.test.data.dao.hibernate.NominationHibernateDAO]: Constructor threw exception; nested exception is java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:900)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
        at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
        at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
        ... 27 more
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.dev.test.data.dao.hibernate.NominationHibernateDAO]: Constructor threw exception; nested exception is java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:108)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
        ... 42 more
    Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
        at com.dev.test.data.dao.hibernate.AbstractHibernateDAO.<init>(AbstractHibernateDAO.java:50)
        at com.dev.test.data.dao.hibernate.NominationHibernateDAO.<init>(NominationHibernateDAO.java:36)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
        ... 44 more

什么可能导致这种情况?如果我在 AbstractHibernateDAO 和 NominationHibernateDAO 中进行了编辑,请告诉我。

谢谢你!

编辑这里是片段:

这是 AbstractHibernateDAO 的片段,第 50 行是注释:

public abstract class AbstractHibernateDAO<T, K extends Serializable>
        implements DAO<T, K> {

    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    private SessionFactory sessionFactory;

    private Class<T> persistentClass;

    protected AbstractHibernateDAO(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
        this.persistentClass = (Class<T>) ((ParameterizedType) //LINE 50
                getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

第 36 行后面是 NominationHibernateDAO 代码片段的注释:

@Repository("nominationDao")
public class NominationHibernateDAO<T extends Nomination>
        extends AbstractHibernateDAO<T,Integer>
        implements NominationDAO<T> {


      @Autowired(required = true)
      public NominationHibernateDAO(SessionFactory sessionFactory) {
           super(sessionFactory); //LINE 36
      }

表达方式

getClass().getGenericSuperclass()).getActualTypeArguments()[0]

指的是替换为第一个类型参数的值AbstractHibernateDAO(其中在AbstractHibernateDAO.java表示为T)。被子类替换的类型NominationHibernateDAO还不是具体的,是T extends Nomination,这绝对不是一个java.lang.Class实例,但是一个Type实例 (TypeVariableImpl是一个实现Type).

If the NominationHibernateDAO是用类似的东西声明的:

class NominationHibernateDAO extends AbstractHibernateDAO<Nomination, Integer> { ...

那么AbstractHibernateDAO构造函数魔法会起作用。或者,您可以(或者您甚至应该?)实例化一个子类NominationHibernateDAO声明如下:

class ConcreteNominationHibernateDAO
        extends NominationHibernateDAO<ConcreteNominationSubclass> { ...

or

new NominationHibernateDAO<ConcreteNominationSubclass>() {}

这同样不会引发问题。

您确定NominationHibernateDAO类应该用作 Spring bean 吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试 DAO 时出错:sun.reflect.generics.reflectiveObjects.TypeVariableImpl 无法转换为 java.lang.Class 的相关文章

随机推荐

  • 如何使用 Java Apache POI 在 Excel 中添加标题列?

    我正在编写一个java程序 其中我必须从XML文件中获取数据并将其放入excel文件中 在执行此操作时 我必须创建行标题并相应地添加数据 我知道如何创建列标题 我可以通过以下方式做到这一点 HSSFWorkbook workbook new
  • wkhtmltopdf 是否尊重 css 字体颜色?

    我正在使用 wkhtmltopdf 生成页面的 pdf 但它没有以正确的颜色显示任何字体 它们全部显示为黑色 颜色按照您的预期定义 panel dashboard p stat color bed000 并在浏览器中查看时正确显示 我把它称
  • 在执行回调之前等待 .each() .getJSON 请求完成

    我有一个jquery each循环 从 json 请求中检索页面上具有特定类的所有元素的远程数据 一组元素是一组li我想在之后使用另一个函数对标签进行排序li元素已使用远程信息进行更新 之后传入排序函数 each循环不会对列表进行排序 因为
  • 在稀疏表中选择一行第一个非空值

    使用下表 A B C ts 1 null null 2016 06 15 10 00 4 null null 2016 06 15 11 00 4 9 null 2016 06 15 12 00 5 1 7 2016 06 15 13 00
  • h1之后是否有必要使用H2

    如果文本太小 是否必须在 h1 之后使用 H2 那么我们可以在 h1 之后使用 h4 吗 它可以访问吗 从技术上讲 您可以使用这些的任意组合 从语义上讲 使用通用顺序是明智的 如果字体太小 可以使用 CSS 来更改 与标签h1 h6您赋予标
  • SQL Server - 使用递归外键进行级联 DELETE

    我花了很多时间试图找出如何实现删除时级联SQL Server 上的递归主键已经有一段时间了 我已经阅读了有关触发器 创建临时表等的内容 但尚未找到适合我的数据库设计的答案 这是一个用于演示目的的老板 员工数据库示例 TABLE employ
  • Flutter - 失败:构建失败并出现异常。 - 无法启动守护进程。 - Android Studio - VSCode

    每当我尝试使用 flutter run v 运行 flutter 应用程序时 都会收到以下错误 如果我不使用终端 只需单击 运行 则正在运行的 gradle 任务将继续运行 并且不会发生任何情况 I tried 在 gradle prope
  • Angular 2 ng-bootstrap 模态

    我使用组件而不是模板在应用程序中打开模态 然后我需要将对象模型传递给模态组件 问题是打字稿给出了 modalRef componentInstance 不作为属性存在的错误 我完全复制了示例表单演示页面 但再次给出同样的错误 并且永远不会在
  • 为什么有些语句在线程中运行时执行失败?

    我无法理解程序的行为这段代码示例 http rustbyexample com channels html use std comm use std thread Thread static NTHREADS uint 3 fn main
  • 服务器端处理与客户端处理+ajax?

    寻找一些一般性建议和 或想法 我正在创建一个我认为更像是一个网络应用程序而不是网页的东西 因为我想让它像一个 Gmail 应用程序 您可以让页面整天打开 同时将更新 推送 到页面 对于有兴趣我正在使用彗星编程技术 我以前从未创建过如此丰富的
  • 尝试将字符串转换为 MarketDataIncrementalRefresh

    我有一个文本文件FIX messages 所有这些和 MarketDataIncrementalRefresh 类型 X 我正在尝试找到一种使用的方法QuickFIX in C 创造MarketDataIncrementalRefresh消
  • 当用户从其他选项卡返回时重新加载页面

    我在某种重视更新的网站上工作 为此 当用户从另一个选项卡切换到网站的选项卡时 我需要刷新页面 有没有办法用 JavaScript jQuery 做到这一点 我知道location reload 用于刷新页面 但我不知道如何告诉 JavaSc
  • Three.js 2D 文本精灵标签

    我是 Three js 的新手 并且有一些属于 2D 文本的问题 我想要的是 我想要一些标签 例如 x y 和 z 轴 标签应始终面向相机 也许稍后它们应该只在悬停时才被显示 但那是另一个话题 我的问题是什么我找到了这个教程 这正是我想要达
  • 在 MongoDB GROUP BY 中执行 HAVING 的正确方法是什么?

    对于 SQL 中的这个查询 查找重复项 SELECT userId name FROM col GROUP BY userId name HAVING COUNT gt 1 我在 MongoDB 中执行了这个简单的查询 res db col
  • 如何自动读取 x86 ASM 中的值?

    我知道如何在 x86 ASM 中自动写入一个值 但我该如何阅读呢 LOCK 前缀不能与 mov 一起使用 为了增加价值 我正在做 lock inc dword ptr Counter 如何以线程安全的方式读取 Counter 正如我向你解释
  • 仅在需要时注入模块依赖项(如插件) AngularJS

    我有 2 页 我不使用angular s routing 此限制 在其中之一我想使用该指令ui grid http ui grid info docs tutorial 101 intro就像这个演示一样 var app angular m
  • std::string::compare(const char*) 可以抛出异常吗?

    这是超载 4 here https en cppreference com w cpp string basic string compare 在 异常 部分 重载 2 3 5 6 具有 pos1 和 或 pos2 参数 被命名为 thro
  • 如何使用服务帐户通过 .NET C# 访问 Google Analytics API V3?

    我意识到这个问题之前已经被问过 但几乎没有示例代码 所以我再次询问 但至少有一点方向 经过几个小时的搜索 我想出了以下部分实现 namespace GoogleAnalyticsAPITest Console using System Se
  • 如何设置目录权限

    我跟着SOlink https stackoverflow com questions 4272406 wix how to set permissions for folder and all sub folders为文件夹添加权限 但是
  • 测试 DAO 时出错:sun.reflect.generics.reflectiveObjects.TypeVariableImpl 无法转换为 java.lang.Class

    我对 Spring Hibernate 非常陌生 我正在运行测试来查看我的 DAO 是否正常工作 我收到以下错误 在谷歌搜索时会产生很多不同的答案 主要是拼写错误 我已经检查过 我希望你能帮我解决这个问题 java lang Illegal