繁体   English   中英

3种依赖注入方式之间有什么区别?

[英]Any differences between 3 ways of dependency injection?

第三种是注入豆子的最常见方法吗? 他们之间有什么区别吗?

  1. Bean构造函数参数注入:

      public class Checkout { private final ShoppingCart cart; @Inject public Checkout(ShoppingCart cart) { this.cart = cart; } } 
  2. 初始化方法的参数注入:

     public class Checkout { private ShoppingCart cart; @Inject void setShoppingCart(ShoppingCart cart) { this.cart = cart; } } 
  3. 现场注入:

     public class Checkout { private @Inject ShoppingCart cart; } 

基于观点的答案,但是似乎出于以下原因,最好通过构造函数进行注入。

  • 您可以在构造函数中进行空值检查,这可以为您在类中的其他位置节省一些错误处理。
  • 您可以更轻松地将模拟注入到类中进行测试。
  • 您不能忘记提供依赖项。
  • 它看起来不像魔术。

场注入可能是最常见的。 原因很明显-这是连接事物使其完成任务的最快方法。

至于差异,有一些:

  • 构造函数注入
    • 初始化此 bean 访问其他bean的唯一方法
    • 否则,在实例化bean时,您的bean字段( 字段注入 )将无法工作
    • 例如:创建这个bean时,您需要来自其他bean的数据; 根据此类数据,您可以确定例如该bean将使用哪种策略进行数据存储
  • 场注入
    • 导致延迟注入豆子(可能是焊接专用的,现在不确定)
    • 意味着如果您不做任何额外的工作以使其渴望,那么只有在您首次对其调用一个方法时,该bean才可以实际访问
    • 如果您“只想要豆子”,这是一种首选方法
  • 初始化方法参数注入
    • 如果您需要在注入bean的同时做一些额外的工作,则将需要此功能
    • 在每个bean生命周期中,此事件可能会发生多次(这是您的作用域)
    • 使用示例:您可能要在注入发生后触发一个事件

总而言之,您可以自由使用任何方法。 这里的故事是,有些用例无法通过简单的字段注入来解决。

这只是从我的头上而已,并不详尽。 我希望它能使您对该主题有所了解。

暂无
暂无

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

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