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

时间:2016-09-03 22:48:17

标签: java dependency-injection cdi

第三种注入bean的最常用方法是什么?他们之间有什么不同吗?

  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;
    }
    

2 个答案:

答案 0 :(得分:3)

基于意见的答案,但似乎通过构造函数注入最好是由于以下原因。

  • 您可以对构造函数进行null检查,这可能会为您节省一些类中的错误处理。
  • 您可以更轻松地将嘲讽注入课堂进行测试。
  • 你不能忘记提供依赖。
  • 它看起来不像魔术。

答案 1 :(得分:0)

现场注射可能是最常见的。原因很明显 - 它是连接事物的最快方式,可以让它做点什么。

至于差异,有一些:

  • 构造函数注入
    • 在初始化此
    • 时访问其他bean 的唯一方法
    • 否则在实例化bean时,您的bean字段(字段注入)将无法正常工作
    • 示例:在创建此bean时,您需要来自其他bean的数据;基于此类数据,您可以确定此bean将用于数据存储的策略
  • 现场注入
    • 导致懒惰注入豆类(可能是焊接特定的,现在不确定)
    • 意味着如果你不做任何额外的工作来使它变得渴望,那么只有在你第一次调用方法时才能访问bean
    • 如果您只是想要豆子#34;
    • ,这是一种方法
  • 初始化方法参数注入
    • 如果您在注入bean时需要完成一些额外的工作
    • ,那么你会想要这个
    • 此事件可能会在每个bean生命周期中发生多次(这是您拥有的范围)
    • 使用示例:您可能希望在注入发生后触发事件

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

这只是我的头脑而已,并非详尽无遗。我希望它能够对这一主题有所了解。