getBean get's called three times - once for the <transformer ref="transformer"/> once for the #{transformer:columns} and once for #{transformer:values}

With a singleton scope each stream gets it's own instance using the bean configuration specific to the stream - with prototype scope each getBean gets a new instance but each instance is correctly configured based on the <bean> configuration including the column property

So, bottom line, as is it works with the current stream execution model, but it would also "work" using prototype scope but we would have extra beans floating around.