Guice是google推出的一款轻量级DI框架需要的jar有:
guice-3.0.jar
javax.inject.jar
所谓的绑定就是:将借口绑定到具体的实现类上,当我们通过接口这个引用来调用某个方法的时候,会动态的调用具体实现类的方法,这样客户端不用关系具体的实现逻辑。
(1)创建一个接口Hello.Java
/**
*
* @author Java_Le
* @Date 2014-5-1下午09:38:50
* @ClassName Hello.java
*/
public interface Hello {
void sayHello() ;
}
(2)创建这个接口具体的实现类
/**
*
* @author Java_Le
* @Date 2014-5-1下午10:03:51
* @ClassName HelloImpl.java
*/
public class HelloImpl implements Hello{
@Override
public void sayHello() {
System.out.println("HelloImpl say hello");
}
}
(3)创建guice框架中Module的实现类
package guice.binder;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Singleton;
public class MyModule implements Module{
@Override
public void configure(Binder binder) {
//将借口hello.java 绑定到实现类HelloImpl.java上
//Singleton:表示是scope是单列的,Guice中类的scope只有两类,单例,或者每次都是new的一个新的对象
binder.bind(Hello.class).to(HelloImpl.class).in(Singleton.class) ;
}
}
(4)创建Client模拟测试
package guice.binder;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Client {
public static void main(String[] args) {
Injector in = Guice.createInjector(new MyModule()) ;
Hello hello = in.getInstance(Hello.class) ;//hello -->HelloImpl实例
hello.sayHello() ;
}
}
输出结果:
HelloImpl say hello
总结
本例子就是将Hello这个接口和实现类HelloImpl关联起来,当我们用Guice想去获得这个接口实例的时候,实际返回的是HelloImpl的实例(并且可以维护室单列,还是动态创建的)。