The main reason why auto-detection of implemented interfaces does
not occur for remote interfaces is to avoid opening too many doors to
remote callers. The target object might implement internal callback
interfaces like InitializingBean
or
DisposableBean
which one would not want to
expose to callers.
Offering a proxy with all interfaces implemented by the target usually does not matter in the local case. But when exporting a remote service, you should expose a specific service interface, with specific operations intended for remote usage. Besides internal callback interfaces, the target might implement multiple business interfaces, with just one of them intended for remote exposure. For these reasons, we require such a service interface to be specified.
This is a trade-off between configuration convenience and the risk of accidental exposure of internal methods. Always specifying a service interface is not too much effort, and puts you on the safe side regarding controlled exposure of specific methods.