Spring MVC,从控制器内部调用另一个控制器

2022-09-02 23:14:03

我正在处理一个现有代码,该代码使用一个控制器来调用第二个控制器上的方法。到目前为止,我见过2种实现。

第一次实施

return new Controller().method(request, response);

第二次实施

@Autowired
private Controller controller.

return this.controller.method(request, response);

这是正确的实现,如果其中任何一个有什么问题。


答案 1

仅仅您需要从另一个控制器调用一个方法的事实就揭示了一个可能的设计缺陷。

使用选项1,您将丢失Spring DI容器带给您的一切:也就是说,另一个控制器可能由Spring实例化,并连接到其中一些其他依赖项。如果您自己实例化它,即使它此刻确实有效,因为您可能没有@Autowired/@Value依赖项,一旦您添加对其他资源的依赖项,它就会中断。此外,您已经有一个容器为您构建的实例,为什么要创建其他实例?


答案 2

如果您在控制器之间进行调用,则存在缺陷或您想要进行重定向,这是完全有效的。如果是重定向的情况,只需在控制器方法中返回,如下所示:

return "redirect:/yourDestinationControllerPath";

推荐