初次认识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用户手册中文版 Guice用户手册中文版,IOC的开源框架 立即下载

相关推荐

REST风格的架构

使用guice webwind expressme guice框架搭建的项目,支持GUICE AOP事物,详细教程我后续会写在博客记中

Guice 快速入门

转自 Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果使用过Spring的话,会了解到依赖注入是个非常方便的功能。不过假如只想在项目中使用依赖注入,那么引入Spring未免大材小用了。这时候我们可以考虑使用Guice。本文参考了Guice官方文档,详细信息可以直接查看Guice文档。 基本使用 引入依赖 如果使用Maven的话,添加下面的...

cnhome的专栏 7416

Clipper库中文帮助文档

引言: 第一次接触Clipper,主要是想用来处理DXF中的图形,网上也有博友翻译过,但是可惜打不开,好像那个网站https://love2.io凉凉了,但是优快云上也有博友分享了CHM,看着只剩3个下载币的我好无奈,一怒之下花费两天的时间将英文CHM也翻译了一遍,主要还是想在翻译的同时好好的理解Clipper,为使用打下坚实的基础。当然我也会无私的奉献出来。 简单的认识一下Clipper:...

zefllj的博客 3422

Guice学习(二) ------- 快速入门

这两篇博客基本囊括了Guice所有基本操作: https://blog.youkuaiyun.com/qq_24761191/article/details/79420410 https://blog.youkuaiyun.com/xxxlxy2008/article/details/89736544

zyz的博客 319

开关变换器小信号建模实战:从理论到环路设计

本文深入探讨了开关变换器小信号建模的实战技巧,从理论基础到环路设计全面解析。通过Buck和Boost变换器的具体案例,详细介绍了状态空间平均法、扰动法等关键建模技术,并分享环路补偿设计和实际调试中的宝贵经验。文章特别强调了小信号建模在电源设计中的重要性,为工程师提供了从理论到实践的完整解决方案。

weixin_29290259的博客 376

QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型

常用的地图种类分为交通图,地形图,卫星图等等,在QML的Map(以OSM地图为例)中提供activeMapType属性用于读取当前显示的地图类型(注意:该属性为只读属性,不能用于赋值),QML中地图的加载寻找根据瓦片的文件名进行查找,例如名为"osm_100-l-5-2-2-3.png"的瓦片,其中5代表了该地图的类型

zjgo007的专栏 3164

(转)google guice入门

1. 依赖注入 1.1 类依赖注入 所谓的绑定就是将一个接口绑定到具体的类中,这样客户端不用关心具体的实现,而只需要获取相应的接口完成其服务即可。 HelloWorld.java 1     public interface HelloWorld {2 3         String sayHello();4     }5  然后是具体的实现,HelloWorldImpl.ja...

feiyeguohai1的博客 341

3分钟搞定!QQ音乐歌单导出Excel保姆级教程(含歌单ID获取技巧)

本文提供了一份详细的QQ音乐歌单导出Excel保姆级教程,帮助用户轻松备份和管理个人音乐收藏。教程核心在于获取歌单ID,并利用浏览器开发者工具执行脚本提取数据,最后通过Excel导入功能快速生成结构化表格。整个过程无需编程基础,3分钟即可搞定,是个人数据管理的实用技巧。

weixin_29008691的博客 1400

Google - Guice 入门介绍

感谢本文的原作者让我对Guice可以初步的了解一点,出于项目的考虑,有时候Spring并不能作为一个通用的框架,尤其需要一个轻量级的纯DI框架时,个人认为Guice是个不错的选择。在文章最后还附了一段关于Spring和Guice的比较,有兴趣的童鞋可以看看 本文出处:http://blog.youkuaiyun.com/derekjiang/article/details/7231490

又是一只蚂蚁 4736

深度解读华为Limera:从舱内激光视觉融合看前融合技术的发展与演进

华为Limera激光雷达摄像头融合技术推动自动驾驶感知升级 华为推出的Limera创新性地将激光雷达与摄像头深度集成,采用共光路设计实现数据天然对齐,在小型障碍物识别等关键场景展现卓越性能。该产品代表了传感器前融合技术从分立走向共生的演进趋势,通过硬件级集成解决了多源异构数据融合难题。随着索尼堆叠式传感器等技术的出现,未来智能汽车感知系统将向高度集成的"超级传感器"方向发展,实现更精准的环境感知。Limera的发布标志着前融合技术从"可用"迈向"极致&quo

致力于lidar应用开发 397

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

Google的IOC框架: GUICE

http://java.youkuaiyun.com/subject/gspring.html google的触角真是无所不在,今天刚用上了谷歌拼音输入法,紧接着又看到一个GUICE,下载了user guide来看看,是否也值得尝试应用到项目中去.

BRUNI (不如你) 's 优快云 BLOG 1231

基于R语言的PLS算法实现解读

我们使用"pls"包来执行PLS回归,并提供了相应的源代码。在本文中,我们将详细解读基于R语言的PLS算法的实现过程,并提供相应的源代码。PLS算法的实现可以借助R语言中的"pls"包。该包提供了丰富的函数和工具,用于执行PLS回归、PLS-DA(PLS-Discriminant Analysis)和其他相关任务。除了执行PLS回归,"pls"包还提供了其他功能,例如PLS-DA(用于分类问题)和PLS变量选择等。上述代码将基于输入的X值,使用训练好的PLS模型进行预测,并返回预测结果。

TechWhizKid的博客 1046

Guice初探

听说很久了,今天上网查问题时无意点进了它的官网,翻了一下,网上资料不多,深入研究的也不多,估计国内用的人寥寥无几,手动写了个简单示例,说说两点感想: 第一点就是感觉侵入性很强,但是得失总是矛盾的,侵入性强了意味着对容器的管理更加自如,注入点完全可以由自己定义,由于国内中spring的毒太深了,这点似乎用不到,注入点一般都挪到启动时,一大优势扼杀掉了。 再者就是性能,全注解全动态...

Aronlulu的专栏 400

【QGIS入门实战精品教程】1.2:QGIS与ArcGIS的区别和联系

以下是GISGeography官方给出的两者之间的27点比较(译): 官方网址:https://gisgeography.com/qgis-arcgis-differences/ 1.QGIS容纳更多的数据格式 ArcGIS没有支持所有的数据格式,毫无疑问,QGIS在处理各种类型的数据时非常顺手,QGIS在数据格式方面是个多面手,在使用数据方面是它的长处。 QGIS使用GDAL/OGR库来读取和写入地理信息数据格式,支持超过70种矢量格式。QGIS一开始就是为了与PostGIS协作而诞生的,而支持的名单.

智慧空间实验室 2041

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Guice基本用法

文章对Guice做了简单的介绍,主要展示了Guice的基本用法以及相关概念

Useless Programmer 的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Guice的scope

    Guice的scope默认的有一个singleton,所以scope大致的作用就是对于这个需要让guice管理的类型,如何注入,注入的是哪个对象比如@Singleton就是说在需要注入的地方注入此类型的唯一实例,此jvm里的任何用到的地方都是唯一的     有人会说那Provider不就可以实现这个需要吗?没错,但是你不得不为每一个你需要的的对象都写一个singleto

Vincent的造轮子经验 1700

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Guice之Servlet基础

Guice 提供了一个完整的体系使得我们在web应用中也可以使用它作为依赖注入的工具. 使用Guice的好处:构造函数注入, 类型安全的, 方便的配置方式(只需要在web.xml中进行很少的配置), 模块化, Guice AOP, 同时, Guice并不会改变标准servlet的生命周期.

Useless Programmer 的专栏 2378

Spring-Guice 项目使用教程

Spring-Guice 项目使用教程 项目介绍 Spring-Guice 是一个用于在 Spring 和 Guice 之间进行集成的开源项目。它允许开发者在同一个应用中同时使用 Spring 和 Guice 的功能,充分利用两者的优势。Spring 提供了强大的企业级功能,如事务管理和 MVC 支持,而 Guice 则以其轻量级和简洁的依赖注入机制著称。 项目快速启动 环境准备 Java 8 ...

gitblog_00683的博客 855

Guice

创建一个或多个继承。

2401_85480529的博客 1076

springboot与guice开发

一、采用协作架构 二、pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation...

点点的博客 1431

Guice快速入门

Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的笨重和复杂性,该怎么办呢?有了Google Gui...

shellquery的博客 282
上一篇: Guice 1.0 用户指南
下一篇: MySQL 备份和恢复(MyISAM 和 Innodb)
rq2
rq2
博客等级 码龄23年 1粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值