gpt4 book ai didi

java - 没有实现被绑定(bind) - Java Guice

转载 作者:搜寻专家 更新时间:2023-10-30 21:42:26 26 4
gpt4 key购买 nike

这里的新手尝试使用虚拟 Java Facebook 应用程序,该应用程序使用 Guice 将数据库依赖项注入(inject) Facebook 工厂,但继续让 Guice 错误告诉我:

### No implementation for com.example.storage.Db annotated with @com.example.storage.annotations.SystemDb() was bound while locating com.example.storage.Db annotated with @com.example.storage.annotations.SystemDb() for parameter 0 at com.example.facebook.client.exceptions.FacebookExceptionHandlerDb at com.example.facebook.client.guice.FacebookClientModule.configure

### Could not find a suitable constructor in com.example.facebook.statsd.StatsdClient. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private. at com.example.facebook.statsd.StatsdClient.class while locating com.example.facebook.statsd.StatsdClient for parameter 1 at com.example.facebook.client.exceptions.FacebookExceptionHandlerDb. com.example.facebook.client.guice.FacebookClientModule.configure

应用代码:

应用程序.java

package com.example.facebook;

import com.google.inject.Guice;
import com.restfb.Connection;
import com.restfb.types.Post;
import com.example.facebook.client.FacebookClientFactory;
import com.example.facebook.client.RobustFacebookClient;
import com.example.facebook.client.guice.FacebookClientModule;
import com.example.facebook.statsd.StatsdClient;

public class App {
public static void main ( String[] args ) {
final FacebookClientFactory facebookClientFactory =
Guice.createInjector(new FacebookClientModule()).getInstance(FacebookClientFactory.class);
//error from line above
final RobustFacebookClient robustFacebookClient =
facebookClientFactory.create("accessToken");
//more ...
}

由此产生的错误将我指向 FacebookClientModule 绑定(bind):

FacebookClientModule.java

public class FacebookClientModule extends AbstractModule {
bind(FacebookExceptionHandler.class).to(FacebookExceptionHandlerDb.class);
//error resulting from the failed binding on the FacebookExceptionHandlerDB class

install(new FactoryModuleBuilder()
.implement(FacebookClient.class, RobustFacebookClient.class)
.build(FacebookClientFactory.class));
}

构造函数在 FacebookExceptionHandleDB 类中的哪个位置注入(inject):

FacebookExceptionHandlerDB.java

public class FacebookExceptionHandlerDb implements FacebookExceptionHandler {

// list of class String variables ...
private final FacebookErrorParser parser;
private final Db db;
private StatsdClient statsd;

@Inject
public FacebookExceptionHandlerDb(@SystemDb Db db, StatsdClient statsd, FacebookErrorParser parser) {
this.db = db;
this.statsd = statsd;
this.parser = parser;
}
}

据我所知,参数 0 和 1,dbstatsD 的依赖注入(inject)失败了。有人可以指出应用程序代码中缺少的地方或内容吗?

最佳答案

乍一看,您似乎缺少 Db 注释依赖项和 StatsdClient 的绑定(bind)。

您需要像这样为您的模块提供缺少的绑定(bind)

bind(Db.class).annotatedWith(SystemDb.class).to(DbImplOfSomeSort.class);
bind(StatsdClient.class).to(StatsdClientImplOfSomeSort.class);

Guice 能够使用公共(public)无参数构造函数或带有 @Inject 的构造函数自动注入(inject)具体类,而无需在您的模块中定义任何特定的绑定(bind),但是当涉及到接口(interface)时,您必须定义必要的绑定(bind)。

这里的Db.class和StatsdClient.class是接口(interface),需要绑定(bind)到具体的实现上。

关于java - 没有实现被绑定(bind) - Java Guice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com