服务类和存储库类在Spring MVC中是autowired。但是实体和dto类是在方法中实例化的。是否有任何特定原因。

@Autowired
TestService testService;


但是对于方法实例化

public TestDto getData(){
    TestDto testDto = new TestDto();
    /*Some task*/
    return testDto;
}


为什么在编写代码时dto类没有自动装配。提前致谢。

最佳答案

如果我编写的是您提供的代码,那么我也将像创建者一样在方法内部创建一个带有“ new”的DTO。我将解释原因,并希望它将提供一些要点(当然,您可以从代码:)的作者那里获得最终答案)。

因此,Spring是一个“依赖”注入框架(在这里我强调一个词“依赖”)。这意味着注入对于依赖项(例如具有@ Autowire-d服务的控制器)非常有效。

现在,DTO不再是依赖项。依赖关系通常意味着您要使用某些合同(通过注入遵守该合同的内容,读取依赖bean的接口)。 DTO没有功能合同,它们更像是由服务构造的对象/传递给服务以封装数据的对象。因此,我不将其视为依赖项,因此不应注入它们。

从广义上讲,至少从我的角度来看,使用spring并不意味着“不要使用新的关键字”,而是意味着“不要使用新的关键字来创建依赖项”。

09-28 12:59