Google Guice 介绍
精华
小牛编辑
245浏览
2023-03-14
Guice 是一个开源的、基于 Java 的依赖注入框架。它是轻量级的,由 Google 积极开发/管理。
普通的Java依赖注入
每个基于 Java 的应用程序都有一些对象,它们协同工作以呈现最终用户所看到的工作应用程序。在编写复杂的 Java 应用程序时,应用程序类应尽可能独立于其他 Java 类,以增加重用这些类的可能性,并在单元测试时独立于其他类进行测试。依赖注入(或有时称为连接)有助于将这些类粘合在一起,同时保持它们的独立性。
假设您有一个包含TextEditor组件的应用程序,并且您想要提供拼写检查。你的标准代码看起来像这样
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
spellChecker = new SpellChecker();
}
}
我们在这里所做的是,在 TextEditor 和 SpellChecker 之间创建一个依赖项。在控制反转的情况下,我们会做这样的事情 :
public class TextEditor {
private SpellChecker spellChecker;
@Inject
public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
}
在这里,TextEditor 不应该担心 SpellChecker 的实现。SpellChecker 将独立实现,并在 TextEditor 实例化时提供给 TextEditor。
使用Google Guice的依赖注入
依赖注入由 Google Guice 绑定控制。Google Guice 使用绑定将对象类型映射到它们的实际实现。这些绑定被定义为一个模块。模块是绑定的集合,如下所示:
public class TextEditorModule extends AbstractModule {
@Override
protected void configure() {
/*
* Bind SpellChecker binding to WinWordSpellChecker implementation
* whenever spellChecker dependency is used.
*/
bind(SpellChecker.class).to(WinWordSpellChecker.class);
}
}
模块是注入器的核心构建块,注入器是 Google Guice 的对象图构建器。第一步是创建一个注入器,然后我们可以使用注入器来获取对象。
public static void main(String[] args) {
/*
* Guice.createInjector() takes Modules, and returns a new Injector
* instance. This method is to be called once during application startup.
*/
Injector injector = Guice.createInjector(new TextEditorModule());
/*
* Build object using injector
*/
TextEditor textEditor = injector.getInstance(TextEditor.class);
}
在上面的例子中,TextEditor 类对象图由 Google Guice 构建,该图包含 TextEditor 对象及其依赖项作为 WinWordSpellChecker 对象。