服务类和存储库类是autowired
。但实体和dto类在方法中实例化。有没有具体的原因。
@Autowired
TestService testService;
但是对于方法实例化
public TestDto getData(){
TestDto testDto = new TestDto();
/*Some task*/
return testDto;
}
为什么在编写代码时dto类没有自动装配。提前谢谢。
答案 0 :(得分:1)
如果我正在编写您已经提交过的代码,我也会创建一个带有" new"的DTO。在方法内部就像作者一样。我将解释原因并希望它能提供一些观点(当然,您可以从代码作者:)
获得最终答案)。
所以,Spring是一个"依赖"注入框架(我强调一个词"依赖"这里)。这意味着Injection非常适用于依赖项(例如具有@Autowire-d服务的控制器)。
现在DTO不是依赖项。依赖通常意味着你想要使用的一些契约(通过注入遵守这个契约的东西,读取依赖bean的接口)。 DTO没有功能合同,它们更像是由服务构建的对象/传递给服务来封装数据。所以我不把它们视为依赖,因此不应该注入它们。
从更广泛的意义上讲,使用spring并不代表“不要使用新的关键字”#34; - 它只是意味着 - "不要使用新关键字创建依赖关系",至少从我的角度来看。
答案 1 :(得分:0)
@Autowire用于注入bean。 bean通常是一个单例(只有一个实例在它注入的所有bean之间创建和共享),并且它本身可能有其他bean自动装配,例如配置或数据库连接。为了使所有这些连线都能正常工作,Spring必须负责实例化bean。
如果不需要这些功能,并且您只需要创建一个普通java对象的新唯一实例,那么您只需通过new()实例化它。