Guice系列之用户指南(六)
原文地址:https://code.google.com/p/google-guice/wiki/UntargettedBindings
UntargettedBindings(没有目标的绑定):就是在module里绑定时不需要明确实现类,结合用@ImplementedBy或者@ProvidedBy实现。区别绑定的注解时要加上实现类的类型,即使是父类型。
贴代码:
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.name.Names;
public class AnimalModule extends AbstractModule {
@Override
protected void configure() {
bind(Animal.class)
.annotatedWith(Names.named("Tom"))
.to(Animal.class)
.in(Singleton.class);
System.out.println("run AnimalModule.configure()");
}
}
public class Cat implements Animal {
@Override
public void say() {
System.out.println("i am a cat");
}
}
import javax.inject.Named;
import com.google.inject.Inject;
public class CatWrapper {
Animal animal;
@Inject
private CatWrapper(@Named("Tom") Animal animal) {
System.out.println("CatWrapper.Contructor()");
this.animal = animal;
}
public void say() {
animal.say();
}
public Animal getAnimal() {
return this.animal;
}
}
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Test {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AnimalModule());
CatWrapper wrapper1 = injector.getInstance(CatWrapper.class);
System.out.println(wrapper1);
System.out.println(wrapper1.getAnimal());
CatWrapper wrapper2 = injector.getInstance(CatWrapper.class);
System.out.println(wrapper2);
System.out.println(wrapper2.getAnimal());
}
}
com.zoo.guice.userguide.chap6.p1.CatWrapper@8fce95
com.zoo.guice.userguide.chap6.p1.Cat@143c8b3
CatWrapper.Contructor()
com.zoo.guice.userguide.chap6.p1.CatWrapper@12d7a10
com.zoo.guice.userguide.chap6.p1.Cat@143c8b3
上面这种是@ImplementedBy加上注解绑定的,后面也跟上了to,下面这种是@ProvidedBy实现。
import com.google.inject.ProvidedBy;
@ProvidedBy(value = AnimalProvider.class)
public interface Animal {
void say();
}
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
public class AnimalModule2 extends AbstractModule {
@Override
protected void configure() {
bind(Animal.class).in(Singleton.class);
System.out.println("run AnimalModule.configure()");
}
}
import com.google.inject.Provider;
public class AnimalProvider implements Provider Animal {
public Animal get() {
System.out.println("run Provider.get()");
return new Cat();
}
}
public class Cat implements Animal {
@Override
public void say() {
System.out.println("i am a cat");
}
}
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Test2 {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AnimalModule2());
Animal cat_A = injector.getInstance(Animal.class);
System.out.println(cat_A);
Animal cat_B = injector.getInstance(Animal.class);
System.out.println(cat_B);
}
}
com.zoo.guice.userguide.chap6.p2.Cat@18ee9d6
com.zoo.guice.userguide.chap6.p2.Cat@18ee9d6
《Jersey用户指南》–序言 此书是Jersey 2.23.1的用户手册。我们努力及时更新这本手册因为Jersey 2.23.1增加了一些新的功能。当您在阅读这本用户手册的时候, 请同时参考我们的Jersey API 手册从而进一步理解Jersey 的功能和API。
Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果使用过Spring的话,会了解到依赖注入是个非常方便的功能。不过假如只想在项目中使用依赖注入,那么引入Spring未免大材小用了。
相关文章
- 居中的css:完全指南(翻译)
- iOS开发必备指南合集之游戏接入GameCenter 指南
- JSON入门指南--服务端处理JSON
- Python性能分析指南(未完成)
- Java8简明指南
- Eclipse默认快捷键指南
- Guice系列之用户指南(四)
- Guice系列之用户指南(五)
- Guice系列之用户指南(六)
- Guice系列之用户指南(十一)
- Guice系列之用户指南(十二)
- 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档
- 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
- Padrino 生成器指南
- 【华为云技术分享】实战笔记丨JDBC问题定位指南
- Linux systemctl 命令完全指南
- python基础===PEP网站,代码规范指南
- 不能错过!超强大的SIFT图像匹配技术详细指南(附Python代码)
- YOLO算法创新改进系列项目汇总(入门级教程指南)
- 论文投稿指南——中文核心期刊推荐(园艺)
- 科普扫盲---centos7 集群环境的搭建指南
- 投稿指南【NO.13】计算机学会CCF推荐期刊和会议分享(人工智能)