- 谷歌指南
- Guice - 主页
- Guice - 概述
- Guice - 环境设置
- Guice - 首次申请
- 绑定示例
- Guice - 链接绑定
- Guice - 绑定注释
- Guice - @Named 绑定
- Guice - 常量绑定
- Guice - @Provides Annotation
- Guice - 提供者类
- Guice - 构造函数绑定
- Guice - 内置绑定
- Guice - 即时绑定
- 注射实例
- Guice - 构造函数注入
- Guice - 方法注入
- Guice - 现场注射
- Guice - 可选注射
- Guice - 按需注射
- 其他例子
- Guice - 范围
- Guice-AOP
- 有用的资源
- Guice - 快速指南
- Guice - 有用的资源
- Guice - 讨论
Google Guice - 概述
Guice 是一个开源的、基于 Java 的依赖注入框架。它是安静的轻量级,由 Google 积极开发/管理。
依赖注入
每个基于 Java 的应用程序都有一些对象,它们一起工作以呈现最终用户所看到的工作应用程序。在编写复杂的 Java 应用程序时,应用程序类应尽可能独立于其他 Java 类,以增加重用这些类并在单元测试时独立于其他类进行测试的可能性。依赖注入(有时称为连接)有助于将这些类粘合在一起,同时保持它们的独立性。
假设您有一个具有文本编辑器组件的应用程序,并且您想要提供拼写检查。你的标准代码看起来像这样 -
public class TextEditor { private SpellChecker spellChecker; public TextEditor() { spellChecker = new SpellChecker(); } }
我们在这里所做的是在文本编辑器和拼写检查器之间创建依赖关系。在控制反转场景中,我们会做这样的事情 -
public class TextEditor { private SpellChecker spellChecker; @Inject public TextEditor(SpellChecker spellChecker) { this.spellChecker = spellChecker; } }
在这里,文本编辑器不应该担心拼写检查器的实现。SpellChecker 将独立实现,并在 TextEditor 实例化时提供给 TextEditor。
使用 Guice 进行依赖注入(绑定)
依赖注入由 Guice 绑定控制。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); } }
该模块是 Injector 的核心构建块,它是 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 类对象图是由 Guice 构建的,该图包含 TextEditor 对象及其依赖项 WinWordSpellChecker 对象。