关闭

Guice 注入--(privateModule,intall(),expose())

标签: java
140人阅读 评论(0) 收藏 举报
分类:

          Guice注入的总体思路是:1-首先有Interface 2-针对接口定义一个实现Imp 3-创建一个类(继承自PrivateModule或者AbstractModule )来定义Interface与实现类Imp的关系。通过下面的例子来理解这种定义。

  定义一个Isay接口:

public interface ISay {  String hello();}
  定义ISay接口的实现ChsSayImp,可以定义多个实现
<span style="font-size:18px;">public class ChsSayImp implements ISay {	
	@Override
	public String hello() { return "哈喽";}
}</span>
  ISay接口的另外一个实现EngSayImp

public class EngSayImp implements ISay {
	@Override
	public String hello() { return "Hello";}
}

定义ISay接口与实现的绑定关系

public class SayModule extends AbstractModule {
	@Override
	protected void configure() {
		bind(ISay.class).to(ChsSayImp.class);
	}
}


然后再定义一个接口Iperson

public interface IPerson {
	String say();
	String wirte();
}
定义IPerson的实现类

public class Person implements IPerson {
	@Inject
	private ISay sayImp;//在Iperson的实现类中注入Say的实现
	
	@Override
	public String say() {		
		return sayImp.hello();
	}

	@Override
	public String wirte() {
		return "the write mehod";
	}
}
然后定义Person绑定关系,这里使用PrivateModule来说明其中用法

public class PersonModule extends PrivateModule {
	@Override
	protected void configure() {
		bind(IPerson.class).to(Person.class);
               expose(IPerson.class);	
		install(new SayModule());
	}
}

expose 方法将会使
bind(IPerson.class).to(Person.class); <span style="font-size:18px;">这个私有绑定关系对IPerson接口可见</span>

否则使用injector 无法获取IPerson的实例,一般expose前都会有一个bind方法,expose使这种绑定对module可见


install 就比较容易理解,因为Iperson的实现类中依赖 SayModule ,这里使用install 就是在当前module中添加SayModule依赖 有点类似于 import 引入头文件









0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3100次
    • 积分:117
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条