リスナークラスによるライフサイクルの管理

リスナークラスはPOJOで作成し、ライスサイクル用のアノテーションでメソッドを実装します。

処理対象のレコードオブジェクトが必要なため、基本的に引数にはレコードクラスを指定しておきます。

 1import com.github.mygreen.supercsv.annotation.CsvPostRead;
 2import com.github.mygreen.supercsv.annotation.CsvPostWrite;
 3import com.github.mygreen.supercsv.annotation.CsvPreRead;
 4import com.github.mygreen.supercsv.annotation.CsvPreWrite;
 5
 6// リスナークラスの定義
 7public class SampleListener {
 8
 9    @CsvPreRead
10    public void handlePreRead(final SampleCsv record) {
11
12        // レコードの読み込み前に呼び出されます。
13    }
14
15    @CsvPostRead
16    public void handlePostRead(final SampleCsv record, final CsvBindingErrors bindingErrors, final Class<?>[] groups) {
17
18        // レコードの読み込み後に呼び出されます。
19
20    }
21
22    @CsvPreWrite
23    public void handlePreWrite(final SampleCsv record, final CsvBindingErrors bindingErrors, final Class<?>[] groups) {
24
25        // レコードの書き込み前に呼び出されます。
26
27    }
28
29    @CsvPostWrite
30    public void handlePostWrite(final SampleCsv record, final CsvBindingErrors bindingErrors, final Class<?>[] groups) {
31
32        // レコードの書き込み後に呼び出されます。
33
34    }
35
36}

使用する際には、@CsvBean(listeners=<リスナークラス>) にクラスを指定します。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3
 4// リスナクラスを指定します
 5@CsvBean(header=true, listeners=SampleListener.class)
 6public class SampleCsv {
 7
 8    @CsvColumn(number=1, label="ID")
 9    private Integer id;
10
11    @CsvColumn(number=2, label="値")
12    private String value;
13
14}