Пишем Jenkins Plugin: аннотация @DataBoundSetter

Альтернатива @DataBoundConstructor

Намедни рассматривая пулл-реквесты в плагины для дженкинса, обнаружил интересную аннотацию - @DataBoundSetter. Не раз испытывая боль, добавляя десятый параметр в конструктор с аннотацией @DataBoundConstructor, поискал что это за зверь.

Что говорит Kohsuke Kawaguchi

Оригинал сообщения можно найти в гугл-группах. В сообщении говорится о новой аннотации, которая позволит избавиться от громадных конструкторов с перечислением всех-всех необходимых пропертей. Аннотация доступна начиная с дженкинса 1.535, есть джавадок на сайте степлера

Пример применения

Раньше приходилось делать так:

class Foo {
   int a,b,c,d;
      
   @DataBoundConstructor
   public Foo(int a, int b, int c, int d) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }
}

Теперь можно закинуть только несколько параметров в конструктор, а для остальных параметров пометить аннотацией сеттер или само поле. При этом конструктор может остаться вообще без параметров.

Важно заметить, что сеттеры должны начинаться с префикса set и содержать имя поля и быть публичными. Поля же могут быть с любым модификатором доступа, главное чтобы совпадали с именем проперти

class Foo {
    int a;
    int b;
    
    @DataBoundSetter
    private int c;
    
    @DataBoundSetter
    private int d;
      
    @DataBoundConstructor
    public Foo() {}

    @DataBoundSetter
    public void setA(int a) { this.a = a; }
      
    @DataBoundSetter
    public void setC(int b) { this.b = b; }
}