上一章簡單介紹了,如何使用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的過程)。