为什么要用依赖注入

408 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

java开发者可能都使用过IoC或DI容器框架,spring为代表,该类框架的基础是在框架级别管理各个类间的依赖关系,它描述了依赖对象,这是一种简单而强大的注入方式。

为什么使用依赖注入而不是直接指定资源

面向对象的编程导致了类之间的依赖性。最开始使用new关键字创建对象并将其分配给成员变量,在对象之间建立一种依赖关系

class A {
	private B b;
    public A () {
    	b = new B();
    }
}

现在我们将考虑一下这种方法的缺点:如果B类的创建方式不同,可能需要改变所有依赖B的类的内容。这意味着对B类的改变不会释放到其他类,从而使维护变得困难。也使得只为A类编写测试代码变得更加困难

当你创建一个实例时,你将必要的资源传递给构造函数,这种方法通常被称为DI(依赖注入)

依赖注入

class A {
	private final B b;
    public A(B b){
    	this.b = Object.requireNonNull(b);
    }
}

在这个例子中,我们只使用了B类型,但无论有多少资源,也无论有多少依赖关系,它都能很好地工作。另外final保证不会改变,系统中其他多个调用可以安全地共享依赖对象。

这种方法提高了程序的灵活性和可测试性。

依赖注入的缺点

这样可以提高测试的可用性和灵活性。但在庞大的项目中可能会导致依赖项非常复杂,这时就可以使用Spring、Dagger等依赖对象注入框架来解决这些问题。

总结

如果一个类在内部依赖于一个或多个资源,并且它的行为依赖于这些资源,最好使用依赖注入方法,使用生成器生成需要的资源,而不是自己创建。这样可以极大地提高了类的灵活性、可重用性和可测试性