<!-- language: lang-java -->
final ResourceConfig rc = new ResourceConfig();
//register an *instance* of a REST controller
rc.register(injector.getInstance(MyRestController.class));
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(....
我不想让泽西做任何依赖注射。我认为有从Jersey到Guice的桥梁,但是基于我不能在这里显示的程序需求,我需要自己创建REST控制器实例,并向Guice注入器
请求它们。
我的问题:我怎样才能禁用泽西岛的依赖注入?
我当前正在使用javax.inject.inject
注释。也许我可以改用com.google.inject.inject
注释,以为Jersey不会在寻找这些注释。但我还是宁愿把泽西岛的依赖注射关了。我怎么能那样做?
第一,你的解决方案:
public class GuiceJerseyManualBridge extends io.dropwizard.Application<Configuration> {
@Override
public void run(Configuration configuration, Environment environment) throws Exception {
JerseyEnvironment jersey = environment.jersey();
// create the Guice env and its dependencies
Injector i = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
Map<String, String> props = new HashMap<>();
props.put("testme", "Hello World Guice Inject Test");
Names.bindProperties(binder(), props);
bind(HelloResource.class).in(Singleton.class);
}
});
// get instance
HelloResource resourceInstance = i.getInstance(HelloResource.class);
jersey.register(new AbstractBinder() {
@Override
protected void configure() {
// teach jersey about your guice dependency
bind(resourceInstance).to(HelloResource.class);
}
});
jersey.register(HelloResource.class); // register resource - jersey will discover this from the binding
}
@Override
public void initialize(Bootstrap<Configuration> bootstrap) {
super.initialize(bootstrap);
}
public static void main(String[] args) throws Exception {
new GuiceJerseyManualBridge().run("server", "/home/artur/dev/repo/sandbox/src/main/resources/config/test2.yaml");
}
@Path("test")
@Produces(MediaType.APPLICATION_JSON)
public static class HelloResource {
@Inject
@Named("testme")
private String testString;
public HelloResource() {
System.err.println("I am created now");
}
@GET
@Path("test")
public String test(String x) {
return testString;
}
}
}
请忽略我的DropWizard设置。它使用Jersey和Guice,所以注册部分是相同的。
您在这里面临两个困境:
这个桥实际上只是将bean的创建委托给Guice。这意味着它将(1)向guice请求一个实例,然后自己创建一个(如果guice没有返回实例)。
嗨,这有帮助,
干杯!阿图尔
我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并
我有一个资源类 我尝试了泽西岛2.0的依赖注入中的答案 如果我使用 启动服务器时,我得到 如果我删除了上述依赖项,那么我得到 资源配置类是 活页夹类是 我在嵌入式模式下使用tomcat并添加init参数 我如何在控制器中注入服务?注入是单元测试的首选方式吗(当服务实现调用另一个服务时,比如说XService ),单元测试不应该依赖于Xservice,因此demoServiceImpl如何从测试中将
这是我为我的HTTPServer编写的内容: 任何帮助都将不胜感激。
泽西正常使用HK2依赖注入,但我想用匕首2的泽西。Dagger和HK2都实现了JSR330,我认为这是不需要太多努力就可以实现的。我找到了让Jersey与CDI(例如Weld)、Spring DI和Guice一起工作的方法,但在Dagger上我找不到任何东西。 为了提供一些上下文:我正在SE环境中运行Grizzly-Jersey服务器,而不是在EE容器中。我的Maven项目有和作为依赖项,但没有,
我很难用泽西岛2(2.7)和泽西岛的内置HK2依赖注入来获得一个非常基本的单例类实现。我正在雄猫上运行这个。 我的目标是创建一个支持类的单例实例,供各种web服务方法使用。在构造函数注入、方法注入和注释类成员之间,我没有强烈的偏好(如下所述)。 这是我的单身班: 这是我的应用程序类: 以下是我的Provider/ContextResolver类: web.xml: 我打算在其中注入 JustOne