繁体   English   中英

Spring依赖注入用法

[英]Spring Dependency Injection usage

我仍在学习有关Spring Framework的知识,并且试图真正理解何时以及如何使用依赖注入。

是否应该通过接口管理所有依赖项?

使用接口来显示某种API并具有可能需要换出实现的依赖项(例如,在单元测试中使用模拟)。 一种常见的情况是DAO(数据访问对象),在Spring Data中它称为存储库,它将您的数据模型绑定到一个持久层。 另一个常见的情况是服务,它公开了域模型上的操作。 通常,服务将取决于数据访问层,因此要对服务进行单元测试,您将模拟DAO /存储库。 另一个例子是第三方服务。 这些通常仅由生产系统使用,但必须在开发和测试环境中进行仿真。 在这种情况下,接口要比将布尔标志嵌入代码中要好得多,希望您没有任何逻辑错误。

关于管理依赖项要记住的关键是实际管理对new关键字的使用。 每当使用new ,都将创建对实现的依赖。 依赖注入的目标是分离你如何使用您所依赖的东西随你怎么得到他们。 您可以依赖接口或类,原因很简单,显而易见:Java支持子类化。 因此,即使您依赖类而不是接口,也可能会以subclass结尾。 实际上,Spring框架在许多情况下会自动执行此操作。

如果您发现自己需要创建对象,并且不确定自己是否应该依赖它们,请让依赖项注入框架为这些对象提供一个Factory。 它的工作方式显然取决于框架,但是我所知道的所有支持工厂的框架。 如果您不使用框架,您仍然可以编写工厂并使用它们,而不是一直使用new

如果您在不使用spring IOC容器的情况下编写代码,则必须编写一些工厂类来创建对象并将其连接起来。 例如,请考虑一个服务类,该类具有对DAO实例的引用。 您必须为服务类编写一些初始化工厂,以确保对服务类的单例访问,并确保使用DAO实例实例化服务类。 在代码中到处创建新实例不是一个好习惯,因此使用工厂模式。 但是,如果您使用Spring IOC容器,它将处理所有这些事情。 通常,它创建单例实例,因此您无需在代码中使用new关键字,从而使您可以编写更清晰的代码。 这种方法使您的代码松散地耦合在一起,并且更易于维护。 如果只有一个公共构造函数,则可以自由进行构造函数注入,而无需在新的Spring版本中使用@Autowire侵入式注释。

有春天作为说明三个迪mechanisma 这里 推荐使用三个构造函数注入方法,因为它更具可测试性并且不会导致任何不变性。 使用@Autowire现场注入是邪恶的,不建议使用,因为这不是可测试的解决方案。

希望这可以帮助。 快乐的编码。

暂无
暂无

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

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