我需要一个框架才能使用依赖注入吗? [重复]

问题描述 投票:0回答:3

过去两天我一直在阅读和练习依赖注入,但没有任何效果,突然我发现依赖注入需要一些框架才能工作。 真的吗? 让我的项目依赖于某些框架不是一种不好的做法吗? 不使用框架可以完成吗?

编辑:我是编程新手,所以我不明白实例化类和使用它的方法(我不需要框架)和使用依赖注入之间有什么区别,以及它有什么更好的地方

编辑:这是我不使用框架并且事情不起作用的示例TestNG @Factory注释+对依赖注入的了解不够

java dependency-injection
3个回答
8
投票

不,你不必使用框架:

“依赖注入意味着为对象提供实例变量。真的。就是这样。” - 依赖注入

即开发组件/服务类时,您将其所需的其他组件/服务作为构造函数输入(或通过 setter,但不再推荐这样做)。这也适用于其所需的配置。

该框架基本上“仅”服务于一起构建和插件组件的目的。如果没有框架,您将不得不显式地对这些构建组件进行编码。

您可以查看,正如有人提到的,

Spring Framework
并使用他们的注释:这是一个教程。简而言之,您可以使用装饰器来标记组件类,并将应用程序作为 Spring 应用程序启动。这将创建一个 Spring 上下文,加载所有检测到的 bean(组件和服务),并在应用程序启动时设置其所需的依赖项。

在任何一个选项之间进行选择都是一个偏好问题,这会引发很多固执己见的讨论,所以我不会在这里给出我的:)


3
投票

您不必使用框架,但它会帮助您编写更清晰的代码。例如,如果您想在不使用框架的情况下将模拟注入到类中,则需要通过添加 getter/setter、将其传递给构造函数或使用公共变量来实现这一点。

public class AClassToTest{
   private A aDependentClass; 

   public void aMethodToTest(){
      int i = aDependentClass.someDependentMethod();
      ..
      ..
   }
}

在上面的代码中,

aMethodToTest()
取决于
aDependentClass.someDependentMethod()
返回的内容。这意味着您应该创建类
A
的模拟并模拟
someDependentMethod
返回的内容。在不使用框架的情况下,这仍然是可能的,例如通过添加 getter 和 setter,以便您可以在测试类中设置对象 A:

@Test
public void testAMethodToTest(){
   //here you must set the object A in your AClassToTest object
   //Create a mock of A with desired values
   //and set it using a setter
}

例如,如果您使用 spring 进行依赖注入,它将允许您使用其

@Autowire
表示法在其 IOC 容器中设置模拟对象。那么你不需要为你的模拟对象设置 setter/getter,这将为你提供更清晰的代码


-1
投票

对于依赖注入Guice很棒(个人观点)。至少我发现它比 Spring 提供的要好得多。它也很轻。

https://code.google.com/p/google-guice/

© www.soinside.com 2019 - 2024. All rights reserved.