本文主要是介绍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来获取实例,使用服务。
这篇关于Google Guice 简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!