Java Spring中未发现@Inject或默认构造函数错误
我的代码相当简单,并且由Eclipse生成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
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将尝试实例化一个,这将无法与接口一起工作
解决此问题的两种可能方法:
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;