在spring mvc中实现类内部方法vs autowire

时间:2017-12-16 07:58:47

标签: java spring

在spring mvc中,

服务类和存储库类是autowired。但实体和dto类在方法中实例化。有没有具体的原因。

@Autowired
TestService testService;

但是对于方法实例化

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

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

2 个答案:

答案 0 :(得分:1)

如果我正在编写您已经提交过的代码,我也会创建一个带有" new"的DTO。在方法内部就像作者一样。我将解释原因并希望它能提供一些观点(当然,您可以从代码作者:)获得最终答案)。

所以,Spring是一个"依赖"注入框架(我强调一个词"依赖"这里)。这意味着Injection非常适用于依赖项(例如具有@Autowire-d服务的控制器)。

现在DTO不是依赖项。依赖通常意味着你想要使用的一些契约(通过注入遵守这个契约的东西,读取依赖bean的接口)。 DTO没有功能合同,它们更像是由服务构建的对象/传递给服务来封装数据。所以我不把它们视为依赖,因此不应该注入它们。

从更广泛的意义上讲,使用spring并不代表“不要使用新的关键字”#34; - 它只是意味着 - "不要使用新关键字创建依赖关系",至少从我的角度来看。

答案 1 :(得分:0)

@Autowire用于注入bean。 bean通常是一个单例(只有一个实例在它注入的所有bean之间创建和共享),并且它本身可能有其他bean自动装配,例如配置或数据库连接。为了使所有这些连线都能正常工作,Spring必须负责实例化bean。

如果不需要这些功能,并且您只需要创建一个普通java对象的新唯一实例,那么您只需通过new()实例化它。