nterfaz de controlador anotado @Spring MVC con @ PathVariable

¿Hay alguna razón para no asignar Controladores como interfaces?

En todos los ejemplos y preguntas que veo en torno a los controladores, todas son clases concretas. ¿Hay alguna razón para esto? Me gustaría separar las asignaciones de solicitud de la implementación. Sin embargo, golpeé una pared cuando intenté obtener un@PathVariable como parámetro en mi clase concreta.

a interfaz de @My Controller se ve así:

@Controller
@RequestMapping("/services/goal/")
public interface GoalService {

    @RequestMapping("options/")
    @ResponseBody
    Map<String, Long> getGoals();

    @RequestMapping(value = "{id}/", method = RequestMethod.DELETE)
    @ResponseBody
    void removeGoal(@PathVariable String id);

}

Y la clase implementadora:

@Component
public class GoalServiceImpl implements GoalService {

    /* init code */

    public Map<String, Long> getGoals() {
        /* method code */
        return map;
    }

    public void removeGoal(String id) {
        Goal goal = goalDao.findByPrimaryKey(Long.parseLong(id));
        goalDao.remove(goal);
    }

}

LosgetGoals()l método @ funciona muy bien; elremoveGoal(String id) lanza una excepción

ExceptionHandlerExceptionResolver - Resolving exception from handler [public void
    todo.webapp.controllers.services.GoalServiceImpl.removeGoal(java.lang.String)]: 
    org.springframework.web.bind.MissingServletRequestParameterException: Required 
    String parameter 'id' is not present

Si agrego el@PathVariable anotación a la clase concreta todo funciona como se esperaba, pero ¿por qué debería volver a declarar esto en la clase concreta? ¿No debería ser manejado por lo que tenga la@Controller anotación @

Respuestas a la pregunta(4)

Su respuesta a la pregunta