,)로 이어서 문자열을 만든다
FieldExtractorLineAggregator 컴포넌트가 맡는다 public interface FieldExtractor<T> {
Object[] extract(T item);
}
+--------------------------------------------------+
| FlatFileItemWriter<T> |
|--------------------------------------------------|
| - lineAggregator : LineAggregator<T> |
+--------------------------------------------------+
|
v
+--------------------------------------------------+
| <<interface>> LineAggregator<T> |
|--------------------------------------------------|
| + aggregate(item : T) : String |
+--------------------------------------------------+
^
|
+--------------------------------------------------+
| <<abstract>> ExtractorLineAggregator<T> |
|--------------------------------------------------|
| - fieldExtractor : FieldExtractor<T> |
|--------------------------------------------------|
| + aggregate(item : T) : String |
| # doAggregate(fields : Object[]) : String |
+--------------------------------------------------+
^ ^
| |
+-------------------------------+ +-------------------------------+
| DelimitedLineAggregator<T> | | FormatterLineAggregator<T> |
|-------------------------------| |-------------------------------|
| - delimiter : String | | - format : String |
|-------------------------------| |-------------------------------|
| doAggregate(fields) | | doAggregate(fields) |
+-------------------------------+ +-------------------------------+
Item<T>
|
v
FlatFileItemWriter.write()
|
v
LineAggregator.aggregate(item)
|
v
ExtractorLineAggregator.aggregate(item)
|
+--> FieldExtractor.extract(item)
| |
| v
| Object[] fields
|
+--> doAggregate(fields)
|
+--> DelimitedLineAggregator
| -> "a,b,c"
|
+--> FormatterLineAggregator
-> String.format(...)
지금까지는 객체 하나를 문자열로 바꾸는 법을 살펴봤다
// FlatFileItemWriter.doWrite() -> write()에서 호출
public String doWrite(Chunk<? extends T> items) {
StringBuilder lines = new StringBuilder();
for (T item : items) {
lines.append(this.lineAggregator.aggregate(item)).append(this.lineSeparator);
}
return lines.toString();
}