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

Guice使用练习

阅读更多

Guice是一个轻量级IOC容器(AOP也支持)

注入的配置是自写的Java类,必须继承AbstractModule抽象类,实现configure()方法。

public class HumanModule extends AbstractModule {
	@Override
	protected void configure() {
		bind(Human.class).to(Child.class);
		bind(HumanGroup.class);
		bind(String.class).annotatedWith(FixedValue.class).toInstance("*_*Childs*_*");
		bind(Human.class).annotatedWith(FixedValue.class).to(Woman.class).in(Singleton.class);
	}
}

根据以上代码介绍几种注入

1. 直接注入具体类

bind(HumanGroup.class);

2. 基于接口注入实现类

bind(Human.class).to(Child.class);

3. 注入基础类型的值

bind(String.class).annotatedWith(FixedValue.class).toInstance("*_*Childs*_*");

4. 根据Annotation注入不同类型的实现类

bind(Human.class).annotatedWith(FixedValue.class).to(Woman.class).in(Singleton.class);

5. 可设置对象实体的生命周期(单例)

bind(Human.class).annotatedWith(FixedValue.class).to(Woman.class).in(Singleton.class);

具体例子设计如下:

接口Human类,里面有talk方法,Woman和Child分别为实现类,HumanModule为Guice的配置,HumanGroup为调用并执行talk的具体类。可以执行MainTest里的main方法测试这些例子。

Human类

public interface Human {
	public void talk(String name);
}

Woman类

public class Woman implements Human {
	@Override
	public void talk(String name) {
		System.out.println(name+":I want a house.");
	}
}

Child类

public class Child implements Human {
	@Override
	public void talk(String name) {
		System.out.println(name+":WaWaWa~~(Cry)");
	}
}

HumanModule类

import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
public class HumanModule extends AbstractModule {
	@Override
	protected void configure() {
		bind(Human.class).to(Child.class);
		bind(HumanGroup.class);
		bind(String.class).annotatedWith(FixedValue.class).toInstance("*_*Childs*_*");
		bind(Human.class).annotatedWith(FixedValue.class).to(Woman.class).in(Singleton.class);
	}
}

HumanGroup类

import java.util.Date;
import com.google.inject.Inject;
import com.google.inject.Singleton;

@Singleton
public class HumanGroup {
	public HumanGroup() {
		System.out.println(new Date().getTime());// test singleton
	}

	@Inject
	@FixedValue
	private String groupName;

	/**
	 * properties inject
	 */
	@Inject
	private Human h1;

	public void h1talk() {
		h1.talk("h1");
	}

	private Human h2;

	/**
	 * setter inject
	 */
	@Inject
	public void setH2(Human h2) {
		this.h2 = h2;
	}

	public void h2talk() {
		h2.talk("h2");
	}

	/**
	 * method inject(this method will execute automatic when instance creating)
	 */
	@Inject
	public void h3talk(Human h3) {
		h3.talk("h3");
	}

	@Inject
	@FixedValue
	private Human w;

	public void wtalk() {
		w.talk("w");
	}

	public void noise() {
		this.h1talk();
		this.h2talk();
		this.h3talk(h1);
		System.out.println(groupName);
		this.wtalk();
	}
}

MainTest类

import com.google.inject.Guice;
import com.google.inject.Injector;
public class MainTest {
	public static void main(String[] args) {
		Injector injector = Guice.createInjector(new HumanModule());
		Human h0 = injector.getInstance(Human.class);
		h0.talk("h0");
		HumanGroup group = injector.getInstance(HumanGroup.class);
		for (int i = 0; i < 10; i++) {
			injector.getInstance(HumanGroup.class);// test singleton
		}
		group.noise();
	}
}
 

执行MainTest里的main方法打印结果为:

h0:WaWaWa~~(Cry)
1322056875399
h3:WaWaWa~~(Cry)
h1:WaWaWa~~(Cry)
h2:WaWaWa~~(Cry)
h3:WaWaWa~~(Cry)
*_*Childs*_*
w:I want a house.




附件可下载。

分享到:
评论
1 楼 kobe15371280 2012-05-07  
好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好 

相关推荐

    guice.jar/guice.jar

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

    Guice4.2_jar及使用手册及示例

    Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的复杂性,该怎么办呢? Google Guice一个不错选择。本资源中GUICE的使用方法和使用示例

    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文档-中文(简体)-...

    guice-multibindings-3.0-API文档-中文版.zip

    赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-3.0-sources.jar; 赠送Maven依赖信息文件:guice-multibindings-3.0.pom; ...

    shiro和guice整合,使用权限注解

    shiro的权限注解,必须和aop框架整合使用,guice是一个很轻巧的aop框架,据说比spring aop快100倍。

    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文档-中文(简体)版...

    guice入门学习资料

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

    Google Guice: Agile Lightweight Dependency Injection Framework

    * What the future has in store, including Guice IDE, the next Guice version and the standardization of Guice's concepts through JSR 299. * How you can build real world, Guice-powered web ...

    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文档-中文(简体)版...

    google guice基础例子

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

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

    赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-3.0-sources.jar; 赠送Maven依赖信息文件:guice-multibindings-3.0.pom; ...

    Guice用户中文指南

    Guice用户中文指南,Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器

    Guice_1.0_Manual.pdf

    Guice开发手册, Guice中文开发手册

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

    赠送jar包:guice-assistedinject-3.0.jar; 赠送原API文档:guice-assistedinject-3.0-javadoc.jar; 赠送源代码:guice-assistedinject-3.0-sources.jar; 赠送Maven依赖信息文件:guice-assistedinject-3.0.pom;...

    guice-2.0.jar

    guice-2.0.jar guice-2.0.jar

    google guice 3.0源码

    google guice 3.0源码,官方下载,帮助你更好理解google guice实现的原理

    Google Guice与MyBatis集成,并实现发送邮件轮询

    Google Guice 这个高效的与Spring类似的依赖注入框架; MyBatis配置和使用; Google Guice与MyBatis集成,支持注解事务,简单的无法想象; Mybatis与mysql集成;实现发送邮件轮询; 源码是个web项目,里面有数据库的...

    guice-3.0.rar

    guice-3.0,轻量级IOC容器,包含guice-3.0.jar、guice-spring-3.0.jar、guice-struts2-plugin-3.0.jar

Global site tag (gtag.js) - Google Analytics