I found this an interesting problem, so I played around with it a bit. Here is my solution. I modified some of your original ideas.
Instead of having a @Command annotation, I made an enum to define the different kinds of commands:
Then I created two annotations: @CommandHandlers, which is supposed to be used on a class that contains handler methods, and @CommandHandler, which is supposed to be used on the methods themselves:
An example of a container with handler methods then looks like this:
Then the Router class. It contains an initialize() method with a @PostConstruct annotation, so that Spring will call this method when it creates the Router bean. The initialize() method is going to look for all Spring beans with the @CommandHandlers annotation. For each one that it finds, it's going to look at all the methods that have a @CommandHandler annotation, and it registers a handler.
And an example of how to call the router to route a command: