Google Guice 简介

Dependency Injection (依赖注入)

也就是说将一个接口绑定到具体的类中,这样的话,客户端就不用关心具体的实现,只需要获取相应的接口完成其服务就行了。

写一个接口,里面写一些方法,然后写一个实现类,将方法全部实现。使用的是Annotation,而不是传统意义上的xml或者properties文件。

然后在真正的功能类中,想要使用的时候,先声明一个Injector

Injector injector = Guice.createInjector(里面放一个Module接口的实现类,或者其它抽象类比如AbstractModule的子实现类),Module类的实现类必须实现configure(Binder binder)方法,

即 public void configure(Binder binder){
     binder.bind(接口.class).to(实现类.class);    //不可以自己绑定自己
}

比如: bind.(Service.class).to(ServiceImpl.class);

注意:Guice不允许绑定多个实现在一个接口上,所以实现可以写很多个,但是真正配置的时候,只能绑定一个。这个是可以理解的,试想,你在找实现类的时候总要有一种机制保证到底使用哪一种吧,不可能都使用。

然后当你需要调用的时候,定义一个接口类型的变量,并且赋值

接口类 Service service= injector.getInstance(Service.class);

这样就相当于把ServiceImpl的实例传了过来,然后再调用里面的方法

总结一下,意思就是,将一个ServiceImpl的实例和Service关联起来,当向Guice请求获取一个Service实例的时候,Guice就返回一个ServiceImpl的实例,然后就可以调用Service里面的方法了。

1. @Singleton

使用Injector默认的配置,每次Guice都会返回一个新的实例,有时候可能不希望这样。如果需要实现单例模式(事实上我觉得很多估计都是单例吧),就直接在实现类的类名前面一行加上一个@Singlton标注一下就行

比如
@Singleton
public class ServiceImpl implements Service{
              xxx
              xxx
}

2. @Inject

可以注入构造方法,主要的目的,应该是参数传递。往往实现类中会定义一些成员变量,这些成员变量很可能就是一些接口,然后通过注入构造函数将它们和一些实现类绑定。这样同样也是有个好处,代码维护成本低。试想,你本来使用着一个框架,但是突然小组决定更换框架,这个时候使用注入只需要改一下绑定配置就行了。

反正知道这么个原理就行,注入一些和服务有关系的,服务本身,或者将服务作为参数的构造函数。然后绑定好,通过调用injector来获取实例,使用服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值