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

来源:互联网 发布:知乎武汉船用机械 编辑:程序博客网 时间:2024/05/19 23:11

          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 {@Overridepublic String hello() { return "哈喽";}}</span>
  ISay接口的另外一个实现EngSayImp

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

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

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


然后再定义一个接口Iperson

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

public class Person implements IPerson {@Injectprivate ISay sayImp;//在Iperson的实现类中注入Say的实现@Overridepublic String say() {return sayImp.hello();}@Overridepublic String wirte() {return "the write mehod";}}
然后定义Person绑定关系,这里使用PrivateModule来说明其中用法

public class PersonModule extends PrivateModule {@Overrideprotected 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
原创粉丝点击