[英]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.