otice: 本文作者只是设计模式、Guice和依赖注入的初学者,所以本文不会指出使用Guice的实现方法有什么好处,所写的代码未必是最佳实践,欢迎提出改进意见。
Abstract Factory 模式 http://www.riabook.cn/doc/designpattern/AbstractFactory.htm
使用Guice实现的时候,可以将其中的MacWidgetFactory和WindowsWidgetFactory合并为一个WidgetFactory类:
public class WidgetFactory implements IWidgetFactory {
IButton button;
ITextField textField;
@Inject
public WidgetFactory(IButton button, ITextField textField){
this.button = button;
this.textField = textField;
}
public IButton getButton() {
return button;
}
public ITextField getTextField() {
return textField;
}
}
然后需要表现依赖关系的模块类,如对Windows有WindowsWidgetModule,表示需要Windows接口时将创建一个Windows的对象,并注入
import com.google.inject.AbstractModule;
public class WindowsWidgetModule extends AbstractModule {
@Override
protected void configure() {
bind(IButton.class).to(WindowsButton.class);
bind(ITextField.class).to(WindowsTextField.class);
bind(IWidgetFactory.class).to(WidgetFactory.class);
}
}
此时只需要在CustomDialog 的setWidgetFactory方法中加上@Inject注解即可使用了。
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
public class CustomDialog {
private IButton button;
private ITextField textField;
// 由于客户端只依赖于抽象的工厂,工厂如何实作并无关客户端的事
// 要抽换工厂并不需要改动客户端的程式
@Inject
public void setWidgetFactory(IWidgetFactory widgetFactory) {
setButton(widgetFactory.getButton());
setTextField(widgetFactory.getTextField());
}
public void layoutAllComponents() {
// layout all components
}
// 这边也是依赖抽象,实际改变了元件实例
// 客户端代码也不用更改
public void setButton(IButton button) {
this.button = button;
}
public void setTextField(ITextField textField) {
this.textField = textField;
}
public void showDialog() {
this.paintDialog();
button.paintButton();
textField.paintTextField();
}
public void paintDialog() {
System.out.println("custom dialog paints....");
}
public static void main(String[] args){
//CustomDialog dia = new CustomDialog(new MacWidgetFactory());
CustomDialog dia = new CustomDialog();
dia.setWidgetFactory(new WindowsWidgetFactory());
dia.showDialog();
System.out.println("use guice");
Injector injector = Guice.createInjector(new WindowsWidgetModule());
injector.getInstance(CustomDialog.class).showDialog();
}
}
可以看到 Guice可以再类的方法上加入了@Inject注解,并完成注入的。
同理若需要对Mac做模块化,只要加入一个MacWidgetModule即可
import com.google.inject.AbstractModule;
public class MacWidgetModule extends AbstractModule {
@Override
protected void configure() {
bind(IButton.class).to(MacButton.class);
bind(ITextField.class).to(MacTextField.class);
bind(IWidgetFactory.class).to(WidgetFactory.class);
}
}
分享到:
相关推荐
guice超轻量级依赖注入用了才知道是爽
Java guice3.0轻量级的依赖注入框架 组件guice 是轻量级的依赖注入框架,依赖注入是类将他们的依赖声明为参数,而不是直接创建依赖的一种设计模式。
Guice2中最轻的API扩展将极大地影响开发者代码的大小和维护。Guice2的开发者很好地平衡了可维护性和敏捷性。
Java面试经验
injector, python 依赖注入框架,由Guice启发 注入- python 依赖注入框架,由Guice启发 简介基于 Pattern的依赖注入在 python 中比它的他语言更有用,主要是因为它对关键字参数的支持。这就是说,一个帮助这个过程的...
依赖注入(控制反转的一种形式),它是Java开发主流中一个重要的编程范式(思维方式)。简单的说,使用DI技术可以让对象从别处获得依赖项,而不是由它自己来构造。使用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都没有以任何方式...
Guice (pronounced 'juice')是一个轻量级的依赖注入框架,需要Java 6以上支持。由Google赞助
概述Ray.Di软件包为依赖项注入器提供了以下功能: 构造器注入和二传手注入自动注射构造后初始化原始PHP工厂代码编译器绑定注释/属性使用注入点元数据进行上下文注入面向方面的编程(AOP) 辅助注射空对象入门创建...
Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的复杂性,该怎么办呢? Google Guice一个不错选择。本资源中GUICE的使用方法和使用示例
Guice是一个轻量级的,开源的,依赖项注入框架,适用于Java 6及更高版本。 这样做是为了减轻工厂的需要并在Java代码中使用new。 在某些情况下,您仍然需要像往常一样编写工厂,但是使用Guice,您的代码将不再直接...
jnario-guice.zip,jnario的guice依赖注入规范jnario测试的guice依赖注入
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
把struts2和guice整合起来的一个例子。
Guice用户中文指南,Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器
如果在Jersey 2中使用 Guice,您几乎肯定需要将 Guice 组件注入 Jersey 组件。 与常规 Guice 不同,注入 Jersey 的任何 Guice 组件都需要在 Guice 配置中声明一个绑定。 此适配器扩展了桥接器的功能以包含 Guice JIT...