繁体   English   中英

为什么使用 Spring 的依赖注入而不是常规的依赖注入?

[英]Why Use Spring's Dependency Injection Over Regular Dependency Injection?

我刚刚从 Java 背景中学习 Spring。 我所理解的依赖注入是你提供它依赖的对象,而不是 object 初始化它自己的依赖。 例如:

/*
   MyObj depends on HashMap as a dependency.
 */
public class MyObj {
  private HashMap hashmap;

  public MyObj() {
    this.hashmap = new HashMap();
  }
}

您不是这样做,而是通过构造函数提供HashMap

/*
   MyObj depeneds on HashMap as a dependency.
 */
public class MyObj {
  private HashMap hashmap;

  public MyObj(HashMap hashmap) {
    this.hashmap = hashmap;
  }
}

这就是我认为的依赖注入。 但在我看来,Spring 的做法是代码更多而且更混乱。 在Spring中,你必须有这个单独的方法

@Bean
public HashMap hashmap() {
  return new HashMap();
}

然后使用ApplicationContext.getBean(MyObj.class)构造MyObj object 。 但是,我发现这种方法有很多问题。 首先,在 Swing 应用程序中,这是我初始化组件 ui tree maker 的方式:

public class ComponentUI {
  public ComponentUI(JFrame frame, JPanel panel, ...) {
    this.frame = frame;
    this.panel = panel;
    ...
  }
}

该构造函数中将有很多组件。 这样,我可以通过执行new ComponentUI(...)并传入组件来构造ComponentUI 但是,对于 Spring,我必须为每个方法设置一个单独的方法。 制作每个方法都需要大量空间和大量时间。 但是我发现更糟糕的问题是,如果构造函数中有两个JPanel ,那么您必须创建两个单独的对象来扩展JPanel 让我告诉你我的意思:

public class ComponentUI {
  public ComponentUI(..., JPanel panel1, JPanel panel2, ...) {
    ...
    this.panel1 = panel1;
    this.panel2 = panel2;
    ...
  }
}

使用 Spring,我不能这样做:

@Bean
public JPanel panel1() {
  ...
}

@Bean
public JPanel panel2() {
  ...
}

否则将有两种方法返回相同的 object,因此 Spring 不知道使用哪一种。 相反,我必须创建自己的派生自JPanel的对象,然后在任何地方使用它。 在我的 Swing 应用程序中,我有一整个文件夹,其中包含派生自其他组件的组件。

因此,考虑到这些不便之处,我为什么要使用 Spring 的依赖注入而不是常规的依赖注入,即构建 object 并提供对象。

Spring 依赖注入做的比你展示的更多。 当你尝试自己解决现实世界的所有问题时,你会看到痛苦,然后会欣赏 Spring 依赖的好处,我敢打赌你很快就会开始使用 spring。

我并不是说您必须使用 spring DI,但它会让您的生活更轻松。

暂无
暂无

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

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