Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
I'm working on a proof of concept for a Spring Cloud Stream application. I want to define my processing logic using classes that implement Function, Consumer, or Supplier. I understand that Spring...
#1: Initial revision
How to do function composition in Spring Cloud Stream when using classes
I'm working on a proof of concept for a Spring Cloud Stream application. I want to define my processing logic using classes that implement `Function`, `Consumer`, or `Supplier`. I understand that Spring Cloud Stream allows for [function composition](https://cloud.spring.io/spring-cloud-function/reference/html/spring-cloud-function.html#_function_composition) using function beans, and declaring them with `spring.cloud.function.definition`. What I would like to know is if there is a way to achieve the same function composition behavior when using classes, instead of function beans. For instance, this is how I would like to define the application's functionality: ```java @Component public class MessageValidator implements Function<String, String> { @Override public String apply(final String message) { // Validation logic return message; } } ``` ```java @Component public class FilterFunction implements Function<String, String> { @Override public String apply(final String message) { // Filtering logic return message; } } ``` ```java @Component public class ProcessFunction implements Function<String, String> { @Override public String apply(final String message) { // Processing logic return message; } } ``` And then declare the order: `MessageValidator` > `FilterFunction` > `ProcessFunction`. Is there a way to declare the functionality using these classes and have Spring Cloud Stream compose them in the same way it does with function beans? If so, how can I achieve this?