Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring中未发现@Inject或默认构造函数错误_Java_Eclipse_Spring_Inject - Fatal编程技术网

Java Spring中未发现@Inject或默认构造函数错误

Java Spring中未发现@Inject或默认构造函数错误,java,eclipse,spring,inject,Java,Eclipse,Spring,Inject,我的代码相当简单,并且由Eclipse生成 public class BuchAnalysisPresenter extends Presenter<BuchAnalysisPresenter.MyView, BuchAnalysisPresenter.MyProxy> implements BuchAnalysisUiHandlers { interface MyView extends View, HasUiHand

我的代码相当简单,并且由Eclipse生成

public class BuchAnalysisPresenter extends
            Presenter<BuchAnalysisPresenter.MyView, BuchAnalysisPresenter.MyProxy>
            implements BuchAnalysisUiHandlers {
        interface MyView extends View, HasUiHandlers<BuchAnalysisUiHandlers> {

            SimplePanel getMain();
        }

        @ContentSlot
        public static final Type<RevealContentHandler<?>> SLOT_BUCHNR = new Type<RevealContentHandler<?>>();

        @NameToken(NameTokens.buchnummer)
        @ProxyStandard
        interface MyProxy extends ProxyPlace<BuchAnalysisPresenter> {
        }

        @Inject
        VerlagServiceAsync verlagServiceAsync;

        @Inject
        BuchAnalysisPresenter(EventBus eventBus, MyView view, MyProxy proxy) {

            super(eventBus, view, proxy, HomePagePresenter.SLOT_SetGraphContent);
            getView().setUiHandlers(this);
        }
    }
演示者扩展的公共类
节目主持人
实现buchAnalysisUIHandler{
接口MyView扩展了视图,HasUiHandlers{
SimplePanel getMain();
}
@内容槽
公共静态最终类型>();
@NameToken(NameTokens.buchnummer)
@ProxyStandard
接口MyProxy扩展了ProxyPlace{
}
@注入
VerlagServiceAsync VerlagServiceAsync;
@注入
BuchAnalysisPresenter(EventBus EventBus、MyView视图、MyProxy代理){
超级(eventBus、view、proxy、HomePagePresenter.SLOT_SetGraphContent);
getView().setUiHandlers(此);
}
}
但我得到一个编译错误,说:

无法创建或继承绑定:未找到de.it2media.dps.statistics.client.application.BuchnAnalysis.BuchAnalysisPresenter$MyView的@Inject或默认构造函数

正如您在代码中所看到的,实际上存在一个构造函数
presenter
,以及带有它的
@Inject
注释


我对
Spring
非常陌生,不知道为什么会发生这种情况。

您是否在上下文中定义了MyView类型的bean?如果没有,Spring将尝试实例化一个,这将无法与接口一起工作

解决此问题的两种可能方法:

  • 在Spring上下文中定义适当类型的bean
  • 更改构造函数参数的类型:

    BuchAnalysisPresenter(EventBus eventBus, MyViewImpl view, MyProxy proxy)
    

  • 我找到了解决办法。我只需要调用
    GinBinder
    install()
    方法,然后像这样初始化我的模块。无需进行其他更改

    public class ApplicationModule extends AbstractPresenterModule {
    @Override
    protected void configure() {
        install(new BuchAnalysisModule());
    
        bindPresenter(ApplicationPresenter.class,
                    ApplicationPresenter.MyView.class, ApplicationView.class,
                    ApplicationPresenter.MyProxy.class);
        }
    }
    

    在我的例子中,问题是我在
    视图中使用了错误的HashMap实现,如下所示:

    Map<String, String> map = new HashMap<String, String>();
    
    我用以下内容替换了HashMap,它成功了:)


    我没有定义这种类型的Bean。但是在我的项目中还有其他类似的演示者使用相同的自动生成代码,它们都工作得很好。因此,如果我将参数的类型更改为“MyViewImpl”,我将在哪里定义该类型?如代码所示,它扩展了“视图”类,所以不管我给哪个名称,它都不起作用。您需要使用一个实现此接口的类。在我的示例中,MyViewImpl实现了MyView。如果没有该类的任何可能实现,也可以简单地删除“view”构造函数参数,并使用以下命令对其进行初始化:
    MyView view=new MyView(){public SimplePanel getMain(){/*do something*/}import java.util.Map;
    import com.google.gwt.dev.util.collect.HashMap;
    
    import java.util.HashMap;