参考了一些网友的文章,写了这篇guice的文章,作为备忘。
关于guice就不多说了,它是google的一个IOC容器,因为是基于“注释”的,所以JDK版本必须大约等于1.5。不然是不支持“注释”的。另外,因为其注入方式不需要解析xml,所以速度还是较快的,网上传说比spring快10-100倍,但其功能没有spring强大,但是只做IOC使用,也不失为一种不错的方法。

其jar包和文档都可以到Google官方进行下载:http://code.google.com/p/google-guice/

@Inject注入方式,用@Inject来标识那个方法被注入
* * * * * * * * * * * * * * 接口IHello * * * * * * * * * * * * * * * *
package com.gui;
import com.google.inject.ImplementedBy;

public interface IHello {
    public void sayHello(String userName);
}
* * * * * * * * * * * * * IHello接口的实现 Hello * * * * * * * * * * * * * * * * *
package com.gui;

public class Hello implements IHello{
    public void sayHello(String userName) {
        System.out.println("Hello: "+userName);
    }
}
* * * * * * * * * * * * * * IHello接口的实现 Hello2 * * * * * * * * * * * * * * * *
package com.gui;

public class Hello2 implements IHello{
    public void sayHello(String userName) {
        System.out.println(">>> "+userName);
    }
}
* * * * * * * * * * * * * * HelloServices 在这里面标识哪个方法被注入 * * * * * * * * * * * * * * * *
package com.gui;

import com.google.inject.Inject;

public class HelloServices {
    private IHello hello = null;

@Inject
    public void helloServicessdf(IHello hello) {
        this.hello = hello;
    }

public void sayHello() {
        hello.sayHello("info test");
    }
}

@Inject 表明把其对应的方法进行注入操作,就本例而言,就是把 helloServicessdf方法进行注入,这个方法名字是可以随便起的。
* * * * * * * * * * * * * * module模块 * * * * * * * * * * * * * * * *
package com.gui;

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

public class MyModule implements Module {
    public void configure(Binder binder) {
        binder.bind(IHello.class).to(Hello.class);
    }
}
当然,如果你要注入多个服务,可以再进行binder.bind(*).to(*)即可,不过 public void helloServicessdf(IHello hello)要传两个参数了
* * * * * * * * * * * * * * 调用操作 * * * * * * * * * * * * * * * *
package com.gui;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;

public class TestApp {
    public static void main(String[] args) {
        HelloServices helloServices = new HelloServices(); //服务声明
        Module module = new MyModule(); //声明控制模块

Injector in = Guice.createInjector(module); //控制注入
        in.injectMembers(helloServices); //注入的成员对象
        helloServices.sayHello();
    }
}
因为是对 Hello.class ( binder.bind(IHello.class).to(Hello.class); )进行注入的,所以执行结果为:
Hello: info test
如果改为: binder.bind(IHello.class).to(Hello2.class);
则执行结果为:
>>> info test
------------------------------------------------------------
@ImplementedBy(Class)的注释方式。可以直接从你的接口指向一个缺省的实现,而省略掉对com.google.inject.Module的实现。其实这样就违背了多态的原则,一般使用较少,最后还是把控制权交给Module来处理。
例子:
* * * * * * * * * * * * * * 接口IHello * * * * * * * * * * * * * * * *
package com.gui;
import com.google.inject.ImplementedBy;

@ImplementedBy(Hello2.class)
public interface IHello {
    public void sayHello(String userName);
}
把 Hello2.class 作为缺省的注入实现
* * * * * * * * * * * * * IHello接口的实现 Hello * * * * * * * * * * * * * * * * *
package com.gui;

public class Hello implements IHello{
    public void sayHello(String userName) {
        System.out.println("Hello: "+userName);
    }
}
* * * * * * * * * * * * * * IHello接口的实现 Hello2 * * * * * * * * * * * * * * * *
package com.gui;

public class Hello2 implements IHello{
    public void sayHello(String userName) {
        System.out.println(">>> "+userName);
    }
}
* * * * * * * * * * * * * * 调用测试 * * * * * * * * * * * * * * * *
package com.gui;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;

public class TestApp {
    public static void main(String[] args) {
        Injector in = Guice.createInjector();
        IHello iHello = in.getInstance(IHello.class);
        iHello.sayHello("dddd");
    }
}
* * * * * * * * * * * * * 执行结果 * * * * * * * * * * * * * * *
>>> dddd
如果把 @ImplementedBy(Hello2.class)改为: @ImplementedBy(Hello.class),则执行结果为:
Hello: dddd

guice的使用例子相关推荐

  1. Google Guice使用入门

    2019独角兽企业重金招聘Python工程师标准>>> 本文通过范例简单地介绍Google Guice的使用,通过下面的范例我们可以知道,Google Guice的使用非常简单. G ...

  2. Guice:最好用的依赖注入框架

    首先在你的maven项目里引入 还可以自动注入Set,Map容器,但是得首先加上扩展库 我没有使用官方的例子,写个最简单的HelloWorld Guice里最常用的两个注解就是@Singleton和@ ...

  3. [转载]Guice 1.0 用户指南

    http://code.google.com/p/google-guice/ 用 Guice 写 Java Guice 1.0 用户指南 (20070326 王咏刚 译自:http://docs.go ...

  4. Guice 1.0 用户指南

    http://code.google.com/p/google-guice/ 用 Guice 写 Java Guice 1.0 用户指南 (20070326 王咏刚 译自:http://docs.go ...

  5. guice spring_Spring vs Guice:重要的一个关键区别

    guice spring 根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系,Spring范围大致类似于Map <String,Object>结构. 这意味着您不能有两个 ...

  6. Spring vs Guice:重要的一个关键区别

    根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系,Spring范围大致类似于Map <String,Object>结构. 这意味着您不能有两个名称相同的对象 . 为什么 ...

  7. spring 与 guice 的区别好玩的好法(转)

    看下边对于不同社会形态下一个人(java对象,调用者)需要一把斧子(java对象,被调用者)的例子: (1)原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己 ...

  8. Guice之Servlet基础

    如果读者对于Guice没有大体的了解,可以参考本人的另一篇Guice基础文章 Guice 提供了一个完整的体系使得我们在web应用中也可以使用它作为依赖注入的工具. 为什么使用 Guice : 使用G ...

  9. Google Guice使用入门(转)

    本文通过范例简单地介绍Google Guice的使用,通过下面的范例我们可以知道,Google Guice的使用非常简单. Google Guice需要使用JDK1.5以上java环境. 下载Goog ...

最新文章

  1. python映射类型-Python中字典映射类型的学习教程
  2. ubutnu16.04搭建LAMP环境(搭建wordpress博客)
  3. input标签获取图片文件尺寸
  4. java enumeration 排序_Java如何对java.util.Enumeration进行排序?
  5. java stream filter map collector使用
  6. selenium得到一个动态页面
  7. oracle sqlLoader 批量导入工具使用说明
  8. 【个人笔记】OpenCV4 C++ 快速入门 23课
  9. 人人开源中invalid Code
  10. JavaScript 排序,不只是冒泡
  11. 74HC595工作原理及FPGA实现数码管驱动方法
  12. C++使用redis实例
  13. php 怎么关闭f12,网站禁用f12 禁止调试代码方法
  14. 密码学数学基础:近世代数
  15. RapidIO协议概述(一)
  16. 使用自相关函数的纹理图像周期计算
  17. 西门子PLC与IFIX软件以太网通讯
  18. 三相电压型逆变电路 解答题
  19. 学习机器人SLAM导航核心技术(一)
  20. java——插件echarts数据可视化图表库

热门文章

  1. 服务器与云服务器租用有哪些区别呢?
  2. 用python刷微信阅读_使用python让微信读书自动翻页
  3. Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(五)
  4. 【编译原理】 如何将控制语句翻译成四元式
  5. SD卡、TF卡、SIM卡的区别
  6. Git与GitFlow工具介绍
  7. DO接口测试工装研究
  8. 智慧养老智能化解决方案是什么?智慧养老智能化整体解决方案解决一切养老问题-新导智能
  9. php 蓝奏网盘上传文件,蓝奏云盘客户端v2.6 支持文件夹和大文件上传了
  10. CKH IOD选择通过CSG增强其数字批发和物联网客户体验