difficult to debug, because the flow of control often stopped at an interface
Not sure if I understand how this is a problem - you should always have the concrete class's name in any stacktraces that you have, either from exceptions or by attaching a debugger. Are you attaching a debugger?
Not only that, but if you have your application's logging based around logger name = class name, you'll always know exactly which classes/objects are in control.
Also, if you have the "XML tying it together" how can anything hide behind the interface?
Not sure if I understand how this is a problem - you should always have the concrete class's name in any stacktraces that you have, either from exceptions or by attaching a debugger. Are you attaching a debugger?
Not only that, but if you have your application's logging based around logger name = class name, you'll always know exactly which classes/objects are in control.
Also, if you have the "XML tying it together" how can anything hide behind the interface?