`
shanjing
  • 浏览: 54855 次
  • 性别: 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  
好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好 

相关推荐

    JavaExercisesSpring_GU

    【描述】虽然描述信息较为简洁,但我们可以推测这是一个Java开发的学习资源,包含了使用Spring和Guice进行练习的代码示例。这样的练习通常涵盖了面向切面编程(AOP)、控制反转(IoC)和依赖注入等核心概念。 ...

    leetcode第三题java-coding_exercises:编码练习

    然而,随着我尝试学习和练习不同的东西,它随着时间的推移而发展,例如: 使用 SparkJava 框架创建控制器 使用 Google 的 Guice 框架进行依赖注入 使用 Google 的 Gson 轻松序列化/反序列化 Java 对象。 在 Hacker...

    cbsd-di:依赖注入练习

    依赖注入(Dependency Injection,简称DI)是软件设计模式中的一种...在实际开发中,依赖注入不仅限于Spring框架,还有其他如Guice、PicoContainer等选择,但Spring因其强大的功能和广泛的应用而成为Java开发者的首选。

    worldwindjava源码-ex5_starter:ex5_starter

    世界风java源码 请通读 . 练习 5 学习目标 了解如何以及何时使用单元测试、元编程、存根 从 CI 和 ...在练习 ...您将需要使用 ...您必须测试此服务的连接性,...Guice 动态注入存根或真实代码的额外 2 分,如课堂中所讨论的 Int

    sdp-sp3-2021-回购代码

    的示例,练习和课程文件 软件设计与编程,以及 软件与程序设计III 伦敦大学伯克贝克分校的模块。 dd-mmm-各种帮助会议。 那些最后带有“ consolidation”的正是Java合并类。 DI-类中的依赖项注入示例,包括Hello...

    codepot-vending-machine:自动售货机代码罐

    时髦的IoC容器评论kata Kata旨在熟悉所选的IoC容器(例如Guice,PicoContainer,Hk2,Dagger等)。 练习的目的是使您可以检查所用容器的api。 下载专案切换到适当的分支机构(例如team01) 阅读故事,实施,运行测试...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...

    codingchallenges:编码挑战的存储库

    在编程领域,编码挑战是一种常见的练习方式,旨在提高开发者解决问题的能力和熟练掌握特定编程语言的技巧。本存储库,名为“codingchallenges”,显然聚焦于Java编程语言,特别是使用Java 7版本。在这个项目中,重点...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...

    CS378-Modern-Web-Apps:现代网络应用程序

    - **依赖注入**: 使用如Guice或Spring的依赖注入机制,提高代码的可维护性和可测试性。 - **代码组织与重构**: 掌握良好的代码组织习惯,以及何时和如何进行代码重构以优化代码结构。 6. **安全性** - **HTTPS与...

    IoContainer:文章的 IoContainer 实现

    在Java中,IoContainer可能是对Java的依赖注入(DI)原则的一种实现,类似于Spring框架中的ApplicationContext或者Guice中的Injector。依赖注入允许开发者将对象的创建和组装职责从代码中分离出来,使得代码更易于测试...

Global site tag (gtag.js) - Google Analytics