回答
在给出依赖注入能力之前,您给出的由TextEditor类使用的SpellChecker示例可能看起来像这样。您正在使用它的方法内创建类SpellChecker的新实例。
public class TextEditor {
public void doSomething() {
new SpellChecker().checkSpelling();
}
}
如果你想分离的代码,并能够通过一个模拟的单元测试的目的,或通过您的依赖注入容器提供的另一种实现方式,以取代拼写检查,你必须改变类,并提供一个字段,这实例可以被注入。
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public void doSomething() {
spellChecker.checkSpelling();
}
}
因为这仍然是不容易测试,因为你需要使用反射来注入模拟成私有字段,你可以提供一个二传手或者取出修改从外地民营使该字段包可见。因此,同一包中的单元测试可以访问此字段并提供模拟。
是的,我的问题是“你必须改变类并提供一个可以注入此实例的字段”,这是否意味着它无法注入局部变量'spellChecker',但必须将其更改为成员变量使用DI? 作为一个侧面问题,我已经在代码示例之前缩进了四个空格,但为什么它仍然显示在一行上?你用什么方法发布上述示例代码? @ stefanglase @ Don @ Matt – user1169587
是的,您必须更改类并引入依赖项的字段。有些方法可以捕获和注入类似'New SomeClass()'这样的语句的地方,但是你的类会告诉与执行时会发生什么不同的东西。有关此功能,请参阅PowerMock。并回答你的第二个问题:你不能在注释中格式化代码。 – stefanglase
对不起,我的愚蠢,“但你的班级会告诉与执行时发生的事情不同的是什么”。无论如何,对于春天来说,DI不能用于局部变量吗?或者DI不是为局部变量设计的? – user1169587
- 1. 在外部jar弹簧依赖注入
- 2. 弹簧依赖注入不起作用
- 3. 弹簧3依赖注入和接口
- 4. 弹簧依赖注入的NullPointerException
- 5. 弹簧依赖注入周期
- 6. 弹簧自动依赖注入
- 7. 多个类的弹簧依赖注入
- 8. Hazelcast不注入弹簧依赖关系
- 9. 弹簧依赖注入和泛型类
- 10. 使用构建模式的弹簧依赖注入
- 11. 使用RMI进行弹簧依赖注入
- 12. 在独立的jar中使用弹簧进行依赖注入
- 13. 弹簧3依赖注入(IOC)与注释
- 14. 用弹簧引导向Logback Appender依赖注入
- 15. 使用依赖注入来注入依赖注入器
- 16. 良好实践:保持局部变量作用域VS依赖关系注入
- 17. 弹簧罐依赖关系
- 18. 依赖注入和依赖不使用
- 19. 弹簧依赖注入与JSF2中的空指针异常
- 20. 弹簧依赖注入工厂(动态值)
- 21. Liferay配置操作类 - 弹簧依赖注入
- 22. 在弹簧配置文件中动态依赖注入
- 23. 取决于请求对象的弹簧依赖注入
- 24. 弹簧4依赖注入抽象泛型类不工作
- 25. 弹簧构造函数依赖注入问题
- 26. 弹簧依赖注入到具有构造函数的类
- 27. 依赖注入弹簧/骆驼垃圾收集
- 28. 玩! 2.x与Java 8和弹簧依赖注入
- 29. 访问依赖注入的类变量
- 30. 依赖注入,而不是全局变量
局部变量的依赖注入甚至意味着什么?请向我们展示一些代码,并解释您想要实现的目标! –
你的意思是构造函数注入?或者注入没有setter的变量?... –
也许我不清楚为什么要使用DI。 我看到链接[链接](http://www.tutorialspoint.com/spring/setter_based_dependency_injection.htm) 从示例类TextEditor方法spellCheck(),我认为如果spellChecker是像下面这样的局部变量: SpellChecker spellChecker =新的SpellChecker(); spellChecker.checkSpelling(); 然后如何替换'新的SpellChecker();'与DI? 或在这种情况下不应该使用DI? – user1169587