java.lang.ClassCastException : com. sun.proxy.$Proxy29 无法转换为 com.frodo.questionbank.service.impl.QuestionService

标签 java spring hibernate spring-mvc

我正在从事 Spring-Hibernate 项目。我主要关心的是如何以及在哪里打开和关闭 Hibernate session 。我用谷歌搜索,找到了与 spring 事务管理器相关的文章。我在我的代码中使用了这个。但我收到一些与代理类型转换相关的错误。 我有多个服务和 dao 类,并且我正在使用每个服务类都实现的接口(interface)服务。 在 Controller 中我正在编写这样的代码

@Controller
public class QuestionController {

    @Autowired
    @Qualifier(value="questionDisplayService")
    Service questionService;

    @Autowired
    @Qualifier(value="questionService")
    Service qService;

    @Autowired
    @Qualifier(value="userServiceImpl")
    Service uService;

我稍后会像这样进行类型转换

 long questionid = ((QuestionService) qService).addQuestionService(question, tagsid);

现在我收到以下错误

java.lang.ClassCastException: com.sun.proxy.$Proxy29 cannot be cast to com.frodo.questionbank.service.impl.QuestionService

请建议我可以使用的方式或任何更好的方法。

最佳答案

你的设计很糟糕。服务应该有明确的契约(Contract)。该契约由服务的接口(interface)定义。所有服务共享相同的接口(interface),这没有任何意义:为什么两个完全不同的服务共享相同的合约并具有相同的方法?

由于它们显然没有相同的方法,现在您被迫转换为具体的类而不是依赖它们的接口(interface),因此您完全失去了类型安全性(和可测试性)。由于它们都具有相同的界面,因此您还被迫使用限定符来区分它们。

您的代码应如下所示:

@Controller
public class QuestionController {

    @Autowired
    QuestionDisplayService questionDisplayService;

    @Autowired
    QuestionService questionService;

    @Autowired
    UserService userService;

    ...

    long questionid = questionService.addQuestionService(question, tagsid);

关于java.lang.ClassCastException : com. sun.proxy.$Proxy29 无法转换为 com.frodo.questionbank.service.impl.QuestionService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570891/

相关文章:

java - 警告 : No mapping found for HTTP request with URI [/Spring3MVC/hello. html] 在 DispatcherServlet 中,名称为 'spring'

hibernate - 删除项目后,hasMany 关联列表中为空

java - 我应该为 Spring Controller 中的每个请求创建执行器服务吗?

java - 使用 Java 构建报告

Java - 从 Maven 安装 Spring

spring - 如何访问Grails 3中resources.groovy中的ServletContext?

java - 用户使用 Servlet 和 Hibernate 上传图像

java - Spring NamedParameterJdbcTemplate 问题与 MSSqlServer 中的划分和参数

java - HQL - 两个相同查询之间的差异

java - JPA PessimisticLockScope.NORMAL 和锁定 "relationships"