最近看了一点Dependency Injection的东西, 发现很难理解为什么要使用DI, 为什么要IoC, 到底能带来什么好处. 于是决定选择一款框架学习一下, 以增进自己的理解. 比较之后, 选择了Google Guice, 主要还是从如何使用入手.
1. Guice简介
Guice是Google开发的一款轻量级的注入框架(a lightweight dependency injection framework for Java 5 and above), 与大名鼎鼎的Spring相比, 确实是轻量级的框架. 其主要目标是替代开发中使用关键字new或者大量使用的工厂方法, 以达到解除耦合的目的; 同样该框架的作者Bob Lee也希望Guice能给使用者带来更好的体验, 能帮助开发者提高开发速度和方便维护. OK, 废话不多说了. 详细的介绍可以去官网查看: http://code.google.com/p/google-guice/
2. Hello Guice
我使用的参考书为Apress的Google Guice(Agile Lightweight Dependency Injection Framework), 是Google官网Slice的推荐用书. 该书使用了一个FortuneCookie的例子, 非常形象的介绍了Guice的使用方法. 在本文, 参考介绍使用贩卖Juice的VendingMachine作为例子.
在科技发展初期, 一切都是那么简单.
我们有一个只贩卖一种果汁的自动贩卖机. 为此我们提供了一个接口, 因为世界上不止这么简单的一种贩售机, 除了果汁, 还能卖点别的东西. 而自动贩卖机的果汁也很简单, 只包含一个价格的属性, 当然果汁的味道还是不错的.
public interface VendingMachine {
public int showPrice();
public Juice sellJuice();
}
import java.util.Arrays;
import java.util.List;
public class VendingMachineImpl implements VendingMachine {
private static final List KINDS_OF_JUICE =
Arrays.asList(
new Juice(100)
);
@Override
public int showPrice() {
return KINDS_OF_JUICE.get(0).getPrice();
}
@Override
public Juice sellJuice() {
return KINDS_OF_JUICE.get(0);
}
}
public class Juice {
private int price;
public Juice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public String toString() {
return "It tastes good!";
}
}
那么作为消费者Consumer, 可以询问价格并且购买果汁. 当然购买果汁需要自动贩售机提供服务.
import com.google.inject.Inject;
public class Consumer {
private VendingMachine vendingMachine;
@Inject
public Consumer(VendingMachine vendingMachine) {
this.vendingMachine = vendingMachine;
}
public int getPrice() {
return vendingMachine.showPrice();
}
public Juice buyJuice() {
return vendingMachine.sellJuice();
}
}
在构造函数上我们添加了一个@Inject的标记, 这个是Guice的标记, 表示在构造函数进行Inject, 再加上Module, 我们就可以把VendingMachine和VendingMachineImpl粘合起来. Module是Guice提供的一个接口, 是其指定实现方式的一种方法, 也是比较推荐的一种方式. 绑定的语法可以这么来读: 绑定VendingMachine到VendingMachineImpl的实现上, 使用单例模式. 在Module中进行绑定后, 在标记为@Inject的地方, Guice就会自动为其指定一个实现的实例.
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Scopes;
public class VendingMachineModule implements Module {
@Override
public void configure(Binder binder) {
binder.bind(VendingMachine.class)
.to(VendingMachineImpl.class)
.in(Scopes.SINGLETON);
}
}
万事俱备, 只欠东风. 接下来该喝点果汁了. 通过Guice.createInjector使用我们的Module定义创建出一个Injector后, 我们就可以通过getInstance方法来获取各种对象, 从此告别new和工厂方法.
public class Bootstrap {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new VendingMachineModule());
Consumer consumer = injector.getInstance(Consumer.class);
System.out.println("The price of juice is " + consumer.getPrice());
System.out.println("So, buy this juice and drink it: " + consumer.buyJuice());
}
}
以上为第一个Guice的例子, 我们可以简单的总结出最基本的使用方法: 通过Module配置抽象与实现的关系, 通过@Inject标签来标记注入点. 然后使用万能的Injector来获得对象. 应该是一个很明确的思路, 使用起来也比较简洁.
但是问题随之而来:
1. 这样做能为我们带来什么好处呢?
2. 这就是传说中的Dependency Injection, 该如何去解释.
3. 我们如何能提供更多的服务(More Juice).
4. 我们还有一台售卖零食的自动贩卖机, 我们如何能在买到果汁之后, 再去购买些零食呢?
后面的学习将继续对Guice框架的细节进行学习, 并围绕以上问题来做一些思考.
分享到:
相关推荐
在"Guice入门教程HelloWorld篇"中,我们将学习如何使用Guice来构建简单的Java应用程序。首先,我们需要理解Guice的核心概念——模块(Module)和绑定(Binding)。模块是Guice配置的核心,它定义了哪些类应该被实例...
"google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...
guice 学习资料,快速掌握guice的编程技巧以及了解其机制。
标题《Learning Google Guice》指出本文档是关于学习谷歌Guice的,Guice是由谷歌开发的一个轻量级的依赖注入框架,其核心理念是简化Java应用程序中组件的创建和组装过程,通过依赖注入提高模块间的解耦,从而使得...
"DI容器框架Google Guice与Spring框架的区别" 这个标题表明我们要探讨的是两种不同的依赖注入(Dependency Injection,简称DI)容器——Google Guice和Spring框架之间的差异。DI是一种设计模式,它帮助开发者在对象...
Google Guice 这个高效的与Spring类似的依赖注入框架; MyBatis配置和使用; Google Guice与MyBatis集成,支持注解事务,简单的无法想象; Mybatis与mysql集成;实现发送邮件轮询; 源码是个web项目,里面有数据库的...
**Google Guice**,全称为Google Injection,是一个轻量级的依赖注入框架,它通过注解(Annotations)来实现对象的自动装配,简化了Java应用的构造和管理。Guice的核心理念是帮助开发者摆脱手动创建对象和管理对象...
Google Guice,全称为GoogleInject,是一个轻量级的依赖注入框架,由Google开发并开源。Guice的目标是简化Java应用程序的构造和管理,通过自动装配对象依赖关系,让开发者可以专注于业务逻辑而不是对象的创建和组装...
**标题:“jersey2.15集成guice笔记”** 在Java Web开发中,Jersey是一个流行的RESTful服务实现框架,而Guice是Google提供的一个轻量级依赖注入(DI)容器。这篇笔记将深入探讨如何将这两个强大的工具集成为一体,...
### Google Guice 用户手册知识点详解 #### 一、Google Guice 概览 **Google Guice** 是一个轻量级的 Java 依赖注入容器,它为 Java 5 及以上版本提供支持。与传统的对象创建方式相比,Guice 通过减少样板代码...
Google Guice是一个轻量级的依赖注入框架,由Google开发并维护,主要用于简化Java应用程序的构建和管理。依赖注入(Dependency Injection,简称DI)是一种设计模式,它可以帮助开发者减少代码间的耦合,提高代码的可...
### Google Guice: 敏捷轻量级依赖注入框架详解 #### 一、引言与背景 在现代软件开发中,依赖注入(Dependency Injection, DI)已成为构建灵活、可维护和可测试应用程序的重要手段之一。Google Guice作为一款100%...
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter...
谷歌Guice,全名Google Guice,是一款轻量级的依赖注入框架,专为Java 5及更高版本设计。依赖注入(Dependency Injection,简称DI)是一种软件设计模式,旨在降低代码间的耦合度,提高可测试性和可维护性。Guice通过...
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
Guice是Google提供的一款轻量级的DI框架,它简化了在Java应用中管理对象及其依赖关系的过程。这个“基于Guice的HelloWorld项目”就是一个简单的示例,用于展示如何使用Guice进行依赖注入。 首先,我们需要理解Guice...
标签:google、inject、guice、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
Guice,全称Google Guice,是一款轻量级的依赖注入(Dependency Injection,简称DI)框架,由Google开发并开源。它主要用于简化Java应用程序的构造和管理,通过DI来解耦代码,使代码更易于测试、维护和扩展。Guice的...
博文链接:https://avengerbevis.iteye.com/blog/69237