To implement custom filter or anything for that matter you rarely need to extend anything. SI from the beginning was buit on embracing POJO model where all you need to do is inject a POJO that is compliant with the contract of the specific EIP pattern.
For example; You were asking about custom filter:
Here is what you would do.
1. Create a class with a Method that takes either Message or Object and Map as an argument (if you need access to the whole message)
Code:
public class MyFilter {
public boolean filter(String payload, Map<String, Object> headers){
// do whatever you want to do here as long as you return boolean
}
}
XML:
<int:filter input-channel="inChannel" output-channel="outChannel">
<bean class="foo.bar.MyFilter"/>
</int:filter>
That's all you need
And the same goes for all other endpoints.