在HK2中,可以使用以下代码示例来演示bindAsContract和bind的区别:
// 定义接口
public interface MyService {
void doSomething();
}
// 定义具体的实现类
public class MyServiceImpl1 implements MyService {
@Override
public void doSomething() {
System.out.println("MyServiceImpl1 doSomething");
}
}
public class MyServiceImpl2 implements MyService {
@Override
public void doSomething() {
System.out.println("MyServiceImpl2 doSomething");
}
}
// 创建HK2服务绑定器
public class MyBinder extends AbstractBinder {
@Override
protected void configure() {
// 使用bindAsContract方法将实现类绑定到接口
bindAsContract(MyServiceImpl1.class).to(MyService.class);
// 使用bind方法将实例绑定到接口
bind(new MyServiceImpl2()).to(MyService.class);
}
}
// 测试代码
public class Main {
public static void main(String[] args) {
// 创建HK2服务定位器
ServiceLocator locator = ServiceLocatorUtilities.bind(new MyBinder());
// 获取服务实例
MyService service1 = locator.getService(MyService.class);
service1.doSomething(); // 输出:MyServiceImpl1 doSomething
MyService service2 = locator.getService(MyService.class);
service2.doSomething(); // 输出:MyServiceImpl2 doSomething
}
}
在上面的示例中,使用bindAsContract方法将MyServiceImpl1绑定到MyService接口,使用bind方法将MyServiceImpl2的实例绑定到MyService接口。当请求MyService接口的实例时,HK2会根据绑定方式返回相应的实例。
通过运行以上代码,可以看到输出结果分别是"MyServiceImpl1 doSomething"和"MyServiceImpl2 doSomething",验证了bindAsContract和bind的区别。