我正在编写一个公开REST API的简单微服务.所以我开始与泽西岛合作,当然我需要将我的对象注入球衣资源.基本上我有2个类定义了一组资源,其中一些需要使用另一个服务.
基本上我有:
public interface MyService {
String getServiceName();
void doService();
Run Code Online (Sandbox Code Playgroud)
}
此接口的2个实现(MyServiceBean和MyAlternativeServiceBean)
而且,据我所知阅读球衣文件,我定义了一个hk2 Binder:
public class MyBinder implements Binder{
@Override
public void bind(DynamicConfiguration config) {
DescriptorImpl descriptor = BuilderHelper.link(MyServiceBean.class).named("MyServiceBean").to(MyService.class).build();
config.bind(descriptor);
config.bind(BuilderHelper.link(MyAlternativeServiceBean.class).named("MyAlternativeServiceBean").to(MyService.class).build());
}
Run Code Online (Sandbox Code Playgroud)
我将此绑定程序注册到ApplicationConfig类
public class ApplicationConfig extends ResourceConfig{
public ApplicationConfig(){
property("property.value", "MyAlternativeServiceImplementation");
registerInstances(new MyBinder());
}
Run Code Online (Sandbox Code Playgroud)
}
并正确注释到资源中
@Path("first")
public class First {
@Inject @Named(value = "MyServiceBean")
private MyService myService;
//...
}
@Path("second")
public class Second {
@Inject @Named(value = "MyAlternativeServiceBean")
private MyService myService;
//...
}
Run Code Online (Sandbox Code Playgroud)
一直有效,直到MyService实现没有args构造函数.但在一种情况下,我还需要为MyAlternativeServiceBean提供依赖.
这是构造函数
@Inject @Named("property.value") …Run Code Online (Sandbox Code Playgroud)