服务类和存储库类在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并不意味着“不要使用新的关键字”,而是意味着“不要使用新的关键字来创建依赖项”。