繁体   English   中英

春季-需要带注释的依赖注入

[英]Spring - Need for Dependency Injection with Annotations

我正在尝试了解Spring依赖项注入和自动接线的基础。 所有教科书都说,依赖注入的主要优点是您可以通过仅修改XML来修改应用程序而无需触及Java代码。

但是,当您使用批注时,此目的就无法实现! 那有什么大不了的? 为什么不仅仅实例化它,而没有其他注入代码?

在Spring的早期版本中,所有注入都必须使用XML完成。 在大型项目中,XML本身变得非常大,并且难以维护。 要更改代码中的依存关系,就需要对XML进行相应的更改。 添加了自动装配以方便减小XML的大小。

但是,自动装配不会降低依赖注入,因为可以使用XML来覆盖它。 这提供了XML配置的原始灵活性,并具有方便Spring缺省的默认情况(在该情况下,实现接口的上下文中只有一个bean)的便利。

您的问题似乎是在问为什么我们要进行依赖项注入:“为什么不仅仅实例化它,而要有附加的注入代码?”。 依赖项注入最常见的用途之一是在单元测试中:测试程序将依赖项的测试版本注入到被测对象中,以打破其他依赖项。 例如,如果服务类A调用服务类B,并且B依赖于数据库对象,其他服务,文件系统等,则如果A直接实例化B,则测试A变得非常困难,因为您需要确保所有B的依赖关系得到满足。 如果将A编码为接口iB而不是类B,则单元测试代码可以注入实现iB并响应方法调用的测试类的实例,而无需任何其他依赖。

我相信有很多开发人员认为,如果您要构建持久的可维护代码,则应遵守SOLID原理

SOLID中的D表示依赖关系反转原理 ,它基本上意味着依赖关系注入 因此,如果要保持代码整洁并将对象创建与实际业务代码分开,则依赖注入是一件好事。 此外,根据我的说法,DI使您的代码更可测试。

没错,诸如@Autowired注释对您的代码而言是侵入性的, 但您不必更改逻辑或任何内容 ,只需注释方法即可。

处理依赖项注入的另一种方法也是通过@Configuration@Bean批注使用Java Configuration(请参阅Spring docs )。 如果您真的很想在代码中添加@Autowired ,那么Java配置的介入性就会降低。

这样的SO问题很好地概述了DI为什么重要和良好的原因。 该帖子的一句话是:

依赖注入基本上是提供对象需要的对象(其依赖),而不是让对象自己构造它们。 这是一种非常有用的测试技术,因为它允许对依赖项进行模拟或存根。

通过控制服务实例和松散耦合,您可以在注释中注入任何实现请求的接口的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM