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


问题内容

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

第一次实施

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

第二实施

@Autowired
private Controller controller.

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

哪一种是正确的实现方式,如果其中任何一个存在问题,那将会是什么问题。


问题答案:

您需要从另一个控制器调用方法的事实表明,可能存在设计缺陷。

使用选项1,您将失去Spring
DI容器给您带来的一切:即,其他控制器可能会被Spring实例化,并带有一些其他依赖关系。如果您自己实例化它,即使它现在可以正常工作,因为您可能没有@Autowired
/ @Value依赖关系,那么一旦您添加对其他资源的依赖关系,它就会中断。此外,您已经有一个实例为您构建了容器,为什么还要创建其他实例呢?