Guice 学习初步(一)

1、Guice是什么?

Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。

2、Guice和Spring的比较

和Spring有点类似,Guice也是个依赖注入框架,主要使用注解形式来完成依赖注入的过程,而不是像Spring一样主要使用XML(虽然也可以用注解,但是XML的配置还是作为Spring不可或缺的一部分),Guice的特点就是足够轻量级,对于一些对于性能要求(包括启动速度,运行期等等)要求比较高的应用来讲的话,使用Guice是一个很好的选择,Guice依赖的Jar包很少,对于项目的管理来讲也稍微轻松一点。缺点也有:Guice功能还不足够强,作为企业级的框架在功能上还是稍弱一些,代码的侵入性比较强,依赖关系无法像XML那么直观的描述(这个当然是对于那些习惯了XML来作为描述文件的人来讲,可能你习惯注解的方式,这个因人而异吧)。

3、下载jar包

下载Jar包 https://code.google.com/p/google-guice/ ,或者Maven依赖,将Guice所需的Jar包载入所使用的项目中去:

Maven依赖示例:

< dependency >

 < groupId >com.jolira</ groupId >

 < artifactId >guice</ artifactId >

 < version >3.0.0</ version >

4、包依赖

说明:javax.inject-1.jar是满足Java依赖注入标准(JSR-330)所需的,cglib和asm都是AOP所需的Jar包,aopalliance是AOP Java接口包。

5、HelloWorld

package com.guice.test2;

import com.google.inject.ImplementedBy;

/**
 * TODO : 使用了Guice提供的注解,ImplementedBy,表示该接口由HelloGuiceImpl类实现 这样我们就可以不手动的去配置依赖关系
 *
 * @author E468380
 */
@ImplementedBy(HelloGuiceImpl.class)
public interface HelloGuice {
    public void sayHello();
}
package com.guice.test2;

public class HelloGuiceImpl implements HelloGuice {

    @Override
    public void sayHello() {
        System.out.println("Hello Guice !");

    }

}
package com.guice.test2;

import org.junit.Test;

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

/**
 * TODO : 在这里我们不需要再new一个module,Guice会根据我们提供的注解自己来配置依赖关系
 *
 * @author E468380
 */
public class TestGuice {

    @Test
    public void testHelloGuice() {
        Injector injector = Guice.createInjector();
        HelloGuice helloGuice = injector.getInstance(HelloGuice.class);
        helloGuice.sayHello();
    }

}

输出结果:

Hello Guice !

时间: 2024-10-13 18:15:01

Guice 学习初步(一)的相关文章

Object C学习初步

最近乘着项目不太紧张的时候,赶紧给自己冲了一下电.其实我自己最熟悉的平台应该是.net,所以当初上手windows phone的话是很快,我记得当初是一边跟着项目进展,一边自己开始学习前台的XAML语言以及页面的布局,所以一个项目跟下来的话windows phone平台也就差不多了. 早先就有过学习ios的想法,应该iphone实在是太酷了,感觉开发ios比windows phone更加有成就感.但是前前后后一直在往后推迟,因为ios的同事们一直给我灌输的思想就是oc语言还有挺难学的,相比较c#

MySQL数据库学习初步

我使用的环境是Win7,开始学习PHP和MySQL,并且买了本<Head First PHP & MySQL>,可以从Head First Labs官网获得HeadFirst系列书籍的相关信息和源代码. 1.下载XAMPP开发包 从XAMPP中文官网下载目前比较流行的PHP开发包,XAMPP是完全免费且易于安装的Apache发行版,其中包含MySQL.PHP和Perl.XAMPP适用于Windows.Mac OS X和Linux,XAMPP开放源码包的设置让安装和使用出奇容易.我下载的

mongoDB学习初步总结

What? 最受欢迎的非关系型数据库之一.面向文档的数据库,在存储乎数据方面与关系型数据库有着本质的区别. Why? 简单易用 对多变的业务需求,适应性强于SQL型DB 性能 复制 索引 分片 丰富的查询 灵活的数据模型 毫不逊色的速度 海量数据下表现好 对程序员友好,但是是DBA的噩梦,维护性不佳 构成 相对于SQL数据库 行-> 表 -> 数据库 而言,mongoDB的组织结构是: document -> collection -> DataBase 其中的document ,

Swift学习初步(一)

前几天刚刚将有关oc的教程草草的看了一遍,发现oc其实也不像传说的那么难.今天又开始马不停蹄的学习Swift因为我很好奇,到底苹果出的而且想要代替oc的编程语言应该是个什么样子呢?看了网上的一些中文教材之后,才发现原来swift真的是太灵活,相比较之前oc语言真的是有天壤之别了.随着学习的深入,我发现自己真的喜欢上了swift,鉴于网上的教程还不是太多的缘故,我就萌生了将自己的一些学习体验写成一系列博客的想法,如果有什么不全面的地方欢迎大家来拍砖. 首先我来说说自己对于swift的第一印象吧!那

Ajax 学习初步

Ajax学习 第一步.创建 XMLHTTPRequest 对象 为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXObject : var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera,Safari xmlhttp=new XMLHttpRe

VTK 学习初步

VTK相关的基础知识 VTK,visualization toolkit,可视化工具包,主要应用于三维计算机图形.图像处理和可视化方面.它在三维函数库OpenGL的基础上采用面向对象的设计方法发展而来,且具有跨平台的特性. VTK面向对象,含有大量的对象模型. 源对象是可视化流水线的起点,映射器(Mapper)对象是可视化流水线的终点,是图形模型和可视化模型之间的接口. 回调(或用户方法): 观察者监控一个对象所有被调用的事件,如果正在监控的一个事件被触发,一个与之相 应的回调函数就会被调用.

Android源码学习初步

目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑.众所周知,如今在移动平台市场上,苹果的iOS.谷歌的Android和微软的Windows Phone系统已经形成了三足鼎立的形势,而Android系统的市场占有率是最高的.Android系统之所以能够在市场上占据着第一的位置,一来是因为它依托着谷歌的品德效应和技术实力,二来是因为它是开放的,任何人都可以得到它的源代码,并且能够自由地使用它.既然Android系统是开放的,作为一个移动平台开发人员来说,

storm学习初步

本文根据自己的了解,对学习storm所需的一些知识进行汇总,以备之后详细了解. maven工具 参考书目 Maven权威指南 官方文档 Vagrant storm 参考书目 Getting Started with Storm Storm Real-time Processing Cookbook Storm Blueprints: Patterns for Distributed Real-time Computation eclipse redis nodejs

Guice 学习(七)常量和属性的注入( Constant and Property Inject)

1.常量注入方式 package com.guice.ConstantInjectDemo; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Module; import com.google.inject.name.Named; import com.google.inject.name.Names