java.lang.ClassCastException:com.sun.proxy.$Proxy29不能强制转换为co



我正在进行Spring Hibernate项目。我主要关心的是如何以及在哪里打开和关闭Hibernate会话。我在谷歌上搜索了一下,发现了一篇和spring交易经理有关的文章。我在代码中使用了这个。但我收到了一些与代理类型转换有关的错误。我有多个服务和dao类,并且我使用每个服务类都实现的接口服务。在控制器中,我正在写这样的代码

@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不能强制转换为com.frodo.questionbank.service.impl.QuestionService

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

您的设计太糟糕了。服务应该有明确的合同。此合同由服务的接口定义。你所有的服务共享相同的接口,这毫无意义:为什么两个完全不同的服务共享同一个契约,并具有相同的方法?

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

以下是您的代码应该是什么样子:

@Controller
public class QuestionController {
    @Autowired
    QuestionDisplayService questionDisplayService;
    @Autowired
    QuestionService questionService;
    @Autowired
    UserService userService;
    ...
    long questionid = questionService.addQuestionService(question, tagsid);

最新更新