上一章简单介绍了,如何使用Guice框架来完成接口(父类)和具体的实现类(子类)之间的关联。通过MyModule中:
binder.bind(Hello.class).to(HelloImpl.class).in(Singleton.class) ;
来实现关联关系,这节介绍通过注解来实现关联关系
(1)首先还是Hello.java接口(注意类头上的注解,描述了这个接口要绑定的实现类)
package guice.binder;
import com.google.inject.ImplementedBy;
/**
*
* @author Java_Le
* @Date 2014-5-1下午09:38:50
* @ClassName Hello.java
*/
@ImplementedBy(HelloImpl.class)
public interface Hello {
void sayHello() ;
}
(2)Hello.java这个接口的具体实现类:HelloImpl.java(类头上的注解,这类是单列还是动态创建)
package guice.binder;
import com.google.inject.Singleton;
/**
*
* @author Java_Le
* @Date 2014-5-1下午10:03:51
* @ClassName HelloImpl.java
*/
@Singleton
public class HelloImpl implements Hello{
@Override
public void sayHello() {
System.out.println("HelloImpl say hello");
}
}
(3)我们的MyModule实现类(具体的绑定关系被注释了)
package guice.binder;
import com.google.inject.Binder;
import com.google.inject.Module;
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
输出的结果依然还是HelloImpl say hello,其实,Guice框架不仅可以维护接口和具体的实现类之间的绑定关系,还可以维护父类和之类之间的绑定关系,同样的你完全可以把类的创建交给Guice框架去管理(免去了手动new 的过程)。