当前位置: 首页 > 知识库问答 >
问题:

未绑定任何实现-Java Guice

后阳炎
2023-03-14

这里的新手试图使用虚拟Java Facebook应用程序,该应用程序使用Guice将数据库依赖项注入Facebook工厂,但仍然出现Guice错误,告诉我:

###com没有实现。实例存储Db用@com注释。实例存储注释。在定位com时绑定了SystemDb()。实例存储Db用@com注释。实例存储注释。com上参数0的SystemDb()。实例脸谱网。客户例外情况。com上的FacebookExceptionHandlerDb。实例脸谱网。客户guice。FacebookClientModule。配置

###在com中找不到合适的构造函数。实例脸谱网。statsd。StatsdClient。类必须有一个(并且只有一个)用@Inject注释的构造函数,或者一个非私有的零参数构造函数。在com。实例脸谱网。statsd。StatsdClient。在定位com时初始化。实例脸谱网。statsd。com上参数1的StatsdClient。实例脸谱网。客户例外情况。FacebookExceptionHandlerDb。通用域名格式。实例脸谱网。客户guice。FacebookClientModule。配置

应用程序代码:

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绑定:

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类中,构造函数具有注入:

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、db和statsD的依赖注入分别失败。有人能指出应用程序代码中缺失的地方或内容吗?

共有2个答案

司马彬
2023-03-14

在这种情况下,这并不是问题的根源,但当我将实现和接口类向后放置时,我遇到了这个问题:

public class MyModule extends AbstractModule {
    @Override
    public void configure() {
        bind(MyClassImpl.class).to(MyInterface.class);
    }
}

应该是:

bind(MyInterface.class).to(MyClassImpl.class);
卢德惠
2023-03-14

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

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

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

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

这里b.class和StatsdClient.class是需要绑定到特定实现的接口。

 类似资料:
  • 本文向大家介绍如何实现双向绑定mvvm的原理实现,包括了如何实现双向绑定mvvm的原理实现的使用技巧和注意事项,需要的朋友参考一下 本文能帮你做什么? 1、了解vue的双向数据绑定原理以及核心代码模块 2、缓解好奇心的同时了解如何实现双向绑定 为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造,相对较简陋,并未考虑到数组的处理、数据的循环依赖等,也难免存在一些问题,欢迎大家

  • 问题内容: 在Python中,有没有办法绑定未绑定的方法而不调用它? 我正在编写一个程序,对于某个类,我决定将所有按钮的数据分组为类级别的元组列表是一件好事,如下所示: 问题是,因为所有的值r都是未绑定方法,所以我的程序爆炸得很厉害,我哭了。 我正在网上寻找解决方案,该方案应该是一个相对直接,可解决的问题。不幸的是我找不到任何东西。现在,我正在解决此问题,但是没有人知道是否存在一种干净,健康,Py

  • 我正试图绑定完整的Mapbox导航UI SDK 0.42--由于它是一个多JAR/AAR项目,因此存在多个问题,如下所示:https://github.com/jacquesokes/mapbox-navigationapp-xamarin 我已经经历了大部分的错误,但在最后,当我想把最后的项目实现到一个Xamarin.android项目中时,我在android中发现了4个接口不存在的错误。 因此

  • 我在Helm Chart的帮助下部署Keycloak但Wildfly Stop有以下错误 [0m[0m03:34:19891信息[org.jboss.as.patching](MSC服务线程1-2)WFLYPAT0050:Keyclope累积补丁ID为:base,一次性补丁包括:none[0m[0m03:34:20086信息[org.jboss.modcluster](服务器服务线程池--56)M

  • 问题内容: 我已经做了适当的命名空间声明,但依然面临着错误 有一个类似的问题在这里,但我力得到答案 这是我的xml文档,是我的名称空间不正确吗? 问题答案: 将名称空间声明添加到应用程序上下文文件中的标记定义中

  • 请把这个问题当作严格的教育问题来处理。我仍然有兴趣听到新的答案和想法来实现这一点 如何用JavaScript实现双向数据绑定? 通过与DOM的数据绑定,我的意思是,例如,拥有一个带有属性的JavaScript对象。然后拥有一个DOM元素(例如),当DOM元素发生变化时,也会发生变化,反之亦然(也就是说,我指的是双向数据绑定)。 在简单的JavaScript中实现这一点的一些基本技术是什么? 具体来