本文有两个例子,一个是对接口类的实现类的使用者注入,另一个是对接口实现类直接注入.
1. 创建接口与实现
public interface MyService {
void sayHello();
}
public class MyServiceImpl implements MyService {
@Override
public void sayHello() {
System.out.println("hello,Guice.");
}
}
2. 测试实现类
定义测试类,表明这个类是需要注入的
import com.google.inject.Inject;
public class MyServiceTest {
@Inject
MyService service;
public void sayHello(){
System.out.println("MyServiceTest...");
service.sayHello();
}
}
3. 定义注射规则
实现 Module,表明运行时将哪个实现类赋给接口
import com.google.inject.Binder;
import com.google.inject.Module;
public class MyServiceModule implements Module {
@Override
public void configure(Binder binder) {
binder.bind(MyService.class).to(MyServiceImpl.class).in(Scopes.SINGLETON);
}
}
4. 测试
Guice 根据 Module 创建注射者
从注射者获取接口类实例
调用接口方法
import junit.framework.TestCase;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class TestMyService extends TestCase{
public void testS(){
Injector inj = Guice.createInjector(new MyServiceModule());
MyServiceTest m = inj.getInstance(MyServiceTest.class);
m.sayHello();
/**
* 也可以换成以下代码
* Injector inj = Guice.createInjector(new MyServiceModule());
* MyServiceTest m = new MyServiceTest();
* inj.injectMembers(m);
* m.sayHello();
*/
}
}
-------------------------------------------
下面这个例子跟上面相似,只是没有定义测试类(接口实现类使用者,直接对接口实现类进行注入)
1. 创建接口与实现
同上
2. 测试实现类
定义测试类,表明这个类是需要注入的
此步省略,没有定义测试类,后面直接注射实现类
3. 定义注射规则
实现 Module,表明运行时将哪个实现类赋给接口
同上
4. 测试
Guice 根据 Module 创建注射者
从注射者获取接口类实例
调用接口方法
import junit.framework.TestCase;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class TestMyService extends TestCase{
public void testS(){
Injector inj = Guice.createInjector(new MyServiceModule());
//此类与上面的例子不同之处,只是传入的参数不同,此处传入的是实现类
MyServiceTest m = inj.getInstance(MyServiceImpl.class);
m.sayHello();
}
}
2009年10月28日星期三
订阅:
博文评论 (Atom)
没有评论:
发表评论