`
rq2_79
  • 浏览: 240351 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

初次认识Guice

阅读更多
从网站上看到了有人提起这个框架——Guice,google名下的产物——一个彼Spring快的DI容器,兴趣使然,马上到http://code.google.com/p/google-guice/上去看了看,发现居然是Bob Lee这位大仙的杰作,还犹豫什么,download下来试试!

     恩,从哪里试起呢?还是老规矩,碰到新的东西就来验证我们经典的例子——Hello World!

     这个东西说是DI,居然没有.xml或者.properties文件,老天它用的是该死的Annotation,很好,要是大家也想尝试的话统统5.0或 者以上的干活。安装好环境,开始动手!可是从哪里开始呢?既然说是DI容器,那好,我们先把我们的程序准备好,然后再看它把各个需要的东西怎么 Inject。

     借鉴一下Spring开发手册里的例子吧,稍微改改(无聊的人不要骂这个程序,因为它太简单,我都想骂!)。既然是要打印,我们先来一个打印的服务接口:

 

public interface PrintService
{
    
public void print(String str);
}

 

很好,再来一个它的实现:

 

public class PrintServiceImpl implements PrintService
{

    
public void print(String str)
    {
        System.out.print(str);
    }

}

 

然后呢?一个打印客户Client:

 

public class Client
{
    
private String str="Hello world";
    
private PrintService service;
    void printString()
    {
        service.print(str);
    }

}

 

看到了么?这次Inject的不是那个该死的字符串“Hello World”,而是该死的打印服务!好了,Client和我们的打印服务是分开的,我不知道Guice会怎么把打印服务在Client需要的时候Inject进来。不管怎么做,一个test是应该有的:

 

import junit.framework.TestCase;

public class testClient extends TestCase
{

    
public void testPrintString()
    {
        Client client
=new Client();
        client.printString();
    }

}

 

好了,试试看,应该是红色的条子。废话,Client在这里根本不知道该死的打印服务在哪里。那么寻找打印服务就是Guice的事情了。

     让我们看看Guice是怎么进行Inject的。我们想要Client在使用的时候找到打印服务,那么我们应该在Client需要的时候将其Inject 进去,这样的话我们需要写一个类似于setter的东西来建造一个Inject点,那么我们在Client里添加些东西:

 

import com.google.inject.Inject;
public class Client
{
    
private String str="Hello world";
    
private PrintService service;
    @Inject
    void injectPrintService(PrintService service)
    {
        
this.service=service;
    }

    
void printString()
    {
        service.print(str);
    }

}

 

我们写入了一个injectPrintService方法,这个方法可以充当Inject点,然后我们在这个方法上面来一个Annotation——“@Inject”,这就是告诉Guice应该在哪里Inject我们需要的打印服务。

     好了,我们下面要做的就是把PrintService和我们的实现动态的绑定起来(接口编程,好主意)。在Guice里,我们需要实现一个叫做 Module的接口,Guice将一个binder传递给你的Module,然后你的Module将接口和它的实现绑定起来。让我们来试一下:

 

import com.google.inject.Binder;
import com.google.inject.Module;

public class MyModule implements Module
{

    
public void configure(Binder binder)
    {
        binder.bind(PrintService.
class).to(PrintServiceImpl.class);
    }

}

 

在我们需要打印服务的时候,Guice会自动创建一个PrintServiceImpl的实例给我们。OK,接下来就是如何注入的问题了,我们需要在test中实现:

 

import junit.framework.TestCase;
import com.google.inject.*;

public class testClient extends TestCase
{

    
public void testPrintString()
    {
        MyModule mo
=new MyModule();
        Injector in
=Guice.createInjector(mo);
        Client client
=new Client();
        in.injectMembers(client);
        client.printString();
    }

}

 

完了!一个全新的Hello world将要被打印出来了。

     Guice的工作流程是这样的:

首先将自己创建的Module传给Guice.createInjector(),Guice会为你的Module创建一个binder,你的Module利用这个binder来实现各种绑定,然后在Guice会创建一个Injector出来,我们就可以利用这个Injector来Inject我们的服务了。

   Guice将DI这个概念完完全全的诠释了出来,使我们在编写的应用的时候不必去考虑具体的实现在哪里,Guice会为你动态的绑定并且Inject的。很好使的框架,很有意思,以后继续关注!!

分享到:
评论

相关推荐

    guice.jar/guice.jar

    guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar

    Guice用户中文指南

    ### Guice用户中文指南 #### 一、简介 Guice是一个专门为Java 5及后续版本设计的超轻量级依赖注入框架。它旨在简化应用程序组件之间的依赖管理,并提供了一个更为简洁、灵活的方式来处理对象间的耦合关系。Guice的...

    guice-3.0.rar

    Guice-3.0是Guice的一个版本,包含了核心库guice-3.0.jar,以及与Spring和Struts2集成的扩展库guice-spring-3.0.jar和guice-struts2-plugin-3.0.jar。 1. **Guice核心概念**: - **依赖注入**:Guice的核心机制,...

    Guice 中文文档 例子

    **Guice 概述** Guice 是 Google 推出的一款轻量级的依赖注入框架,专为 Java 5 及其后续版本设计。依赖注入(Dependency Injection,简称 DI)是一种设计模式,它允许开发者在不直接创建对象的情况下,将依赖关系...

    基于guice的简单项目

    **基于Guice的简单项目** 在Java开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于降低代码间的耦合度,提高代码的可测试性和可维护性。Guice是Google提供的一款轻量级的DI框架,它简化了...

    google guice 3.0源码

    Google Guice,全称为GoogleInject,是一个轻量级的依赖注入框架,由Google开发并开源。Guice的目标是简化Java应用程序的构造和管理,通过自动装配对象依赖关系,让开发者可以专注于业务逻辑而不是对象的创建和组装...

    guice-4.0-API文档-中文版.zip

    赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...

    shiro,guice集成

    ### Apache Shiro 与 Guice 集成详解 #### 概述 在现代软件开发过程中,集成不同的框架和技术是常见的需求。Apache Shiro 是一个强大的、易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能。而 Google ...

    Google Guice: Agile Lightweight Dependency Injection Framework

    ### Google Guice: 敏捷轻量级依赖注入框架详解 #### 一、引言与背景 在现代软件开发中,依赖注入(Dependency Injection, DI)已成为构建灵活、可维护和可测试应用程序的重要手段之一。Google Guice作为一款100%...

    guice超轻量级依赖注入

    Guice,全称为Google Guice,是一款由Google开发的轻量级依赖注入(Dependency Injection,简称DI)框架,主要用于简化Java应用的初始化和组件管理。依赖注入是一种设计模式,它可以帮助开发者解耦代码,提高软件的...

    google Guice 1.0 用户指南 中文

    "google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...

    初试Guice测试文件

    【标题】: Guice框架初探与测试实践 在Java世界中,依赖注入(Dependency Injection,简称DI)是一种常见的设计模式,它可以帮助我们构建松耦合、可测试的代码。Guice是Google提供的一款轻量级的DI框架,用于简化...

    guice入门学习资料

    guice 学习资料,快速掌握guice的编程技巧以及了解其机制。

    Google Guice需要的jar

    Google Guice是一个轻量级的依赖注入框架,由Google开发并维护,主要用于简化Java应用程序的构建和管理。依赖注入(Dependency Injection,简称DI)是一种设计模式,它可以帮助开发者减少代码间的耦合,提高代码的可...

    Guice用户指南翻译

    **标题:“Guice用户指南翻译”** **描述:** Guice是Google开发的一款轻量级依赖注入(DI)框架,它使得Java应用的组件管理变得简单。依赖注入是一种设计模式,它有助于降低代码间的耦合度,提高软件的可测试性...

    初试Guice(转)

    **初试Guice** Guice,全称Google Guice,是一款轻量级的依赖注入(Dependency Injection,简称DI)框架,由Google开发并开源。它主要用于简化Java应用程序的构造和管理,通过DI来解耦代码,使代码更易于测试、维护...

    guice-3.0-API文档-中英对照版.zip

    赠送jar包:guice-3.0.jar; 赠送原API文档:guice-3.0-javadoc.jar; 赠送源代码:guice-3.0-sources.jar; 赠送Maven依赖信息文件:guice-3.0.pom; 包含翻译后的API文档:guice-3.0-javadoc-API文档-中文(简体)-...

    google-guice用户手册

    ### Google Guice 用户手册知识点详解 #### 一、Google Guice 概览 **Google Guice** 是一个轻量级的 Java 依赖注入容器,它为 Java 5 及以上版本提供支持。与传统的对象创建方式相比,Guice 通过减少样板代码...

Global site tag (gtag.js) - Google Analytics