Notice: 本文作者只是设计模式、Guice和依赖注入的初学者,所以本文不会指出使用Guice的实现方法有什么好处,所写的代码未必是最佳实践,欢迎提出改进意见。
Builder 模式 http://www.riabook.cn/doc/designpattern/BuilderPattern.htm
使用Guice实现的时候,可以只用bind方法来进行依赖关系的建立,但是这样对现有代码的改造太多。因此这里将使用Guice的另一个特性——Provider来进行Builder模式的改造。使用这种方法的时候,原示例中的代码除了Main类之外都不需要改动:
由于MazeDirector实例的创建需要比较多的参数,所以我们建立一个MazeDirector的Provider,其作用看上去和工厂方法很像。
import com.google.inject.Inject;
import com.google.inject.Provider;
public class MazeDirectorProvider implements Provider<MazeDirector> {
IMazeBuilder mazeBuilder;
@Inject
public MazeDirectorProvider(IMazeBuilder mazeBuilder) {
this.mazeBuilder = mazeBuilder;
}
public MazeDirector get() {
MazeDirector director = new MazeDirector();
director.setMazeBuilder(mazeBuilder);
int[][] maze = { { 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 2, 1 },
{ 1, 0, 1, 0, 1, 0, 1 }, { 1, 0, 2, 1, 0, 1, 1 },
{ 1, 1, 0, 1, 0, 1, 1 }, { 1, 0, 0, 2, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1 } };
director.setMaze(maze);
return director;
}
}
然后需要表现依赖关系的模块类如下:
import com.google.inject.AbstractModule;
public class MazeModule extends AbstractModule {
@Override
protected void configure() {
bind(IMazeBuilder.class).to(DiamondMazeBuilder.class);
bind(MazeDirector.class).toProvider(MazeDirectorProvider.class);
}
}
此时Main方法的内容就很少了,只是关注获取一个MazeDirector对象,并运行其buildMaze方法。
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MazeModule());
injector.getInstance(MazeDirector.class).buildMaze();
}
}
观察这段代码,当要求获得一个MazeDirector类的实例的时候,Guice会查找绑定关系,,并确定通过MazeDirectorProvider类来提供,MazeDirectorProvider中需要IMazeBuilder接口的注入,依然是Guice完成的。
分享到:
相关推荐
guice超轻量级依赖注入用了才知道是爽
Java guice3.0轻量级的依赖注入框架 组件guice 是轻量级的依赖注入框架,依赖注入是类将他们的依赖声明为参数,而不是直接创建依赖的一种设计模式。
Java面试经验
injector, python 依赖注入框架,由Guice启发 注入- python 依赖注入框架,由Guice启发 简介基于 Pattern的依赖注入在 python 中比它的他语言更有用,主要是因为它对关键字参数的支持。这就是说,一个帮助这个过程的...
Guice2中最轻的API扩展将极大地影响开发者代码的大小和维护。Guice2的开发者很好地平衡了可维护性和敏捷性。
依赖注入(控制反转的一种形式),它是Java开发主流中一个重要的编程范式(思维方式)。...Java DI的官方标准是JSR-330,本文我们还会介绍JSR-330的参考实现Guice 3,一个轻量级 的DI框架。 IoC and DI
这个存储库包含一个简单的例子,展示了如何在 Dropwizard 中使用 Guice 进行依赖注入。 Scala 是所选择的语言,但请注意,这里是非常“Java 的咖啡脚本”,而不是任何更复杂或更实用的语言。 这个示例的创建是由一...
[Manning Publications] 依赖注入 实战 (英文版) [Manning Publications] Dependency Injection (E-Book) ☆ 图书概要:☆ Dependency Injection is an in-depth guide to the current best practices for using ...
Google Guice示例。 你学到什么? 如何实现简单的链接绑定? 当您对同一个类型有多个实现时,如何...笔记: 我在大多数地方都使用javax.inject.Inject批注指定依赖项,这样我们就可以避免在特定层导入Google Guice库。
Google Guice 这个高效的与Spring类似的依赖注入框架; MyBatis配置和使用; Google Guice与MyBatis集成,支持注解事务,简单的无法想象; Mybatis与mysql集成;实现发送邮件轮询; 源码是个web项目,里面有数据库的...
sauce, 一个C 98依赖注入框架 酱 基于xml的C 98插件依赖注入。如果你不需要严格的C 98兼容性,我建议你看一下谷歌的水果,而不是。design和 NAME 都受到谷歌 Guice框架插件的启发,但谷歌和Guice都没有以任何方式...
概述Ray.Di软件包为依赖项注入器提供了以下功能: 构造器注入和二传手注入自动注射构造后初始化原始PHP工厂代码编译器绑定注释/属性使用注入点元数据进行上下文注入面向方面的编程(AOP) 辅助注射空对象入门创建...
Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的复杂性,该怎么办呢? Google Guice一个不错选择。本资源中GUICE的使用方法和使用示例
Guice是一个轻量级的,开源的,依赖项注入框架,适用于Java 6及更高版本。 这样做是为了减轻工厂的需要并在Java代码中使用new。 在某些情况下,您仍然需要像往常一样编写工厂,但是使用Guice,您的代码将不再直接...
Guice (pronounced 'juice')是一个轻量级的依赖注入框架,需要Java 6以上支持。由Google赞助
jnario-guice.zip,jnario的guice依赖注入规范jnario测试的guice依赖注入
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
Guice用户中文指南,Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter...
gradle-guice-chinese.pdf,gradle构建工具中文说明文档