服务类和存储库类在 spring mvc 中是 Autowiring
的。但实体和 dto 类是在方法内实例化的。有什么具体原因吗?
@Autowired
TestService testService;
但对于方法实例化
public TestDto getData(){
TestDto testDto = new TestDto();
/*Some task*/
return testDto;
}
为什么在编写代码时 dto 类没有 Autowiring 。提前致谢。
最佳答案
如果我编写您提供的代码,我也会像作者一样在方法中创建一个带有“new”的 DTO。我将解释原因,并希望它能提供一些要点(当然,您可以从代码的作者那里得到最终答案 :)
)。
所以说,Spring是一个“依赖”注入(inject)框架(我这里强调一个“依赖”二字)。这意味着注入(inject)非常适合依赖项(例如具有 @Autowire-d 服务的 Controller )。
现在 DTO 不再是依赖项。依赖通常意味着你想要使用一些契约(通过注入(inject)遵守这个契约的东西,读取依赖bean的接口(interface))。 DTO 没有功能契约,它们更像是由服务构造/传递给服务以封装数据的对象。所以我不把它们算作依赖项,因此不应注入(inject)它们。
从更广泛的意义上来说,使用 spring 并不意味着“不要使用新的关键字”——它只是意味着——“不要使用新的关键字来创建依赖项”,至少从我的角度来看是这样。
关于java - spring mvc 中方法内部类的实例化与 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47843725/