我希望你能很好地编码。所以...我正在重构我工作的GWT应用程序的客户端,我想知道一些事情。几天后我回答了一个答案,我决定问你的观点......
标题非常明白,但是,有一段我想做的事情。
我想改变这样的东西
public AnnotatedObject annotated = GWT.create(AnnotatedObject.class);
通过类似的东西
@CreativeAnnotation
public AnnotatedObject;
我不得不说,在我的xxx.gwt.xml中,我做过类似的事情:
<replace-with class="package.AnnotationObject2">
<when-type-is class="package.AnnotationObject" />
</replace-with>
正如你所看到的,我的deffered替换类是AnnotationObject2,目前,我在上面的那些之间加了一行,我有:
<replace-with class="package.AnnotationObject1">
<when-type-is class="package.AnnotationObject" />
<when-property-is name="type" value="object1" />
</replace-with>
<replace-with class="package.AnnotationObject2">
<when-type-is class="package.AnnotationObject" />
<when-property-is name="type" value="object2" />
</replace-with>
我不太喜欢使用我的xxx.html的元数据,所以我喜欢的结果就是这个:
@CreativeAnnotation(type = "object2")
public AnnotatedObject;
那么,你认为GWT可以做到这一点(我不得不说我使用GWT 2.5,以及我的客户需求的原因)?如果是的话,你可以帮助我吗?
提前致谢。
编辑:我的意思是,我知道GIN ......只是想知道如何从头开始。
答案 0 :(得分:4)
您可以通过使用GIN的依赖注入来实现此目的。 GIN自动使用GWT.create()创建一个必须注入的对象。 例如:
class MyView {
interface MyUiBinder extends UiBinder<Widget, MyView> {
}
@Inject
MyView(MyUiBinder uiBinder) {
initWidget(uiBinder.createAndBindUi(this));
}
}
通过依赖注入,您还可以指定要在GIN模块中实例化的接口实现:
public class MyModule extends AbstractGinModule {
protected void configure() {
bind(AnnotationObject.class).annotatedWith(Names.named("object1").to(AnnotationObject1.class);
bind(AnnotationObject.class).annotatedWith(Names.named("object2").to(AnnotationObject2.class);
}
}
然后在你的代码中:
public class MyClass {
@Inject
public MyClass(@Named("object1") AnnotationObject annotationObject) {
...
}
}
您也可以使用自定义绑定注释而不是命名注释。
答案 1 :(得分:1)
如果您不想使用GIN,您可以编写自己的生成器 - 对于类似这样的事情,这将是非常简单的。