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.
附件可下载。
分享到:
相关推荐
【描述】虽然描述信息较为简洁,但我们可以推测这是一个Java开发的学习资源,包含了使用Spring和Guice进行练习的代码示例。这样的练习通常涵盖了面向切面编程(AOP)、控制反转(IoC)和依赖注入等核心概念。 ...
然而,随着我尝试学习和练习不同的东西,它随着时间的推移而发展,例如: 使用 SparkJava 框架创建控制器 使用 Google 的 Guice 框架进行依赖注入 使用 Google 的 Gson 轻松序列化/反序列化 Java 对象。 在 Hacker...
依赖注入(Dependency Injection,简称DI)是软件设计模式中的一种...在实际开发中,依赖注入不仅限于Spring框架,还有其他如Guice、PicoContainer等选择,但Spring因其强大的功能和广泛的应用而成为Java开发者的首选。
世界风java源码 请通读 . 练习 5 学习目标 了解如何以及何时使用单元测试、元编程、存根 从 CI 和 ...在练习 ...您将需要使用 ...您必须测试此服务的连接性,...Guice 动态注入存根或真实代码的额外 2 分,如课堂中所讨论的 Int
的示例,练习和课程文件 软件设计与编程,以及 软件与程序设计III 伦敦大学伯克贝克分校的模块。 dd-mmm-各种帮助会议。 那些最后带有“ consolidation”的正是Java合并类。 DI-类中的依赖项注入示例,包括Hello...
时髦的IoC容器评论kata Kata旨在熟悉所选的IoC容器(例如Guice,PicoContainer,Hk2,Dagger等)。 练习的目的是使您可以检查所用容器的api。 下载专案切换到适当的分支机构(例如team01) 阅读故事,实施,运行测试...
依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...
在编程领域,编码挑战是一种常见的练习方式,旨在提高开发者解决问题的能力和熟练掌握特定编程语言的技巧。本存储库,名为“codingchallenges”,显然聚焦于Java编程语言,特别是使用Java 7版本。在这个项目中,重点...
依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...
依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合...
- **依赖注入**: 使用如Guice或Spring的依赖注入机制,提高代码的可维护性和可测试性。 - **代码组织与重构**: 掌握良好的代码组织习惯,以及何时和如何进行代码重构以优化代码结构。 6. **安全性** - **HTTPS与...
在Java中,IoContainer可能是对Java的依赖注入(DI)原则的一种实现,类似于Spring框架中的ApplicationContext或者Guice中的Injector。依赖注入允许开发者将对象的创建和组装职责从代码中分离出来,使得代码更易于测试...