[非官方]苍穹平台@注解支持探究(四)抽象类与最终实现原创
金蝶云社区-shiro
shiro
7人赞赏了该文章 702次浏览 未经作者许可,禁止转载编辑于2022年09月08日 09:26:02

1. 抽象类实现

通过上述三篇文章,我们了解了helper 的底层原理。下边我们探究一下helper究竟如何使用,我采用了一个抽象类作为中转站,里面重写了click,click,registerListener,让helper作为代理对象,去调用我们所写的方法。

public abstract class AbstractFormAnnotationPlugin extends AbstractFormPlugin {
    private AnnotationSupport.AnnotationHelper helper = AnnotationSupport.start(this);

    @Override
    public void click(EventObject evt) {
        helper.click(evt);
    }

    @Override
    public void itemClick(ItemClickEvent evt) {
       helper.itemClick(evt);
    }

    @Override
    public void registerListener(EventObject e) {
        helper.registerListener();
    }
}

因此我们在使用时只需要继承AbstractFormAnnotationPlugin并且 不要重写那些方法,即可完成注解支持,如果我们是在需要重写的话,请保留super.xxx()

2.开发代码实现

让我们实现一个最简单的需求,点击文本字段旁边的按钮,弹出文本框中内容。
如果使用原生模式,会出现这样的代码。

public class TextFieldClick extends AbstractFormPlugin {
 
       private final static String KEY_TEXTFIELD1 = "textfield1";
 
       @Override
       public void registerListener(EventObject e) {
              super.registerListener(e);
 
              // 侦听文本字段按钮点击事件
              this.addClickListeners(KEY_TEXTFIELD1);
       }
 
       @Override
       public void click(EventObject evt) {
              super.click(evt);
              Control source = (Control)evt.getSource();
              if (StringUtils.equals(KEY_TEXTFIELD1, source.getKey())){
                     this.getView().showMessage((String) this.getModel().getValue(KEY_TEXTFIELD1));
              }
       }
}

当开启注解支持后

public class Test extends AbstractFormAnnotationPlugin {

    private final static String KEY_TEXTFIELD1 = "textfield1";

    @OnClick(control = KEY_TEXTFIELD1)
    public void test(){
        this.getView().showMessage((String) this.getModel().getValue(KEY_TEXTFIELD1));
    }

}

后日谈

最终我们通过四篇文章的交流,最终实现了前言所讲的无需注册和 @OnClick注解,
done


赞 7