今天在采访中,采访者问我," 告诉我......什么是依赖注射?我们为什么要使用它?" 。为此,我回答了DI和IoC的传统定义以及DI如何通过不使用new创建对象来帮助使代码松散耦合,并通过spellchecker程序在运行时提供对象作为方法参数。
public class TextEditor {
private IocSpellChecker checker;
public TextEditor(IocSpellChecker checker) {
this.checker = checker;
}
}
他似乎对我的书呆子答案不太满意,并问我一个实时问题,依赖注入应该消除,他还暗示它必须做一些bean实例化和内存优化。他也提到了它与@Autowire有关。
我在谷歌搜索后几小时都不知道这个。问题的答案应该是什么?这些都是如何相关的?
答案 0 :(得分:0)
关于内存优化我可以想象他意味着DI有助于获取现有对象实例以供重用,而不是因为传递现有对象的懒惰而创建新实例。 (例如Spring-)上下文管理您的bean并关心赋值/注入。在此之前,您必须使用单例或将所有共享对象保留为静态或单例类中的成员,并且此类已在所有位置引用。
答案 1 :(得分:0)
在我看来,DI最有益的方面是它使代码更具可测性和灵活性。使用DI,因为可以在运行时注入依赖项,所以模拟不同的实现并测试代码要容易得多。
检查本文的“依赖注入的好处”部分,以便进一步阅读: http://www.javacreed.com/why-should-we-use-dependency-injection/
但是,对于内存优化,他可能意味着当系统创建对象并注入它时,它会更加优化(因为它是自动化的)。但是,我不确定DI是否会带来某种性能提升。将检查并回到此处。