Here, the data processing is done by an ItemProcessor object that can transform and manipulate the <T> data that has been read from the ItemReader object. An ItemProcessor can return the same <T> object that was read, or another <O> object that is completely different if that's the desired behavior.