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

          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 引入头文件









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值