2012-11-09 13 views
10

Czy ma sens mieć przypisaną (@Controller) Klasa abstrakcyjna w kontenerze napędzanym sprężyną MVC, zasadniczo chciałaby umieścić większość metod wielokrotnego użytku, takich jak jako wychwytywaczy wyjątków w klasie Abstract i rozszerz go o klasę podstawową, dzięki czemu nie trzeba powtarzać tego samego kodu standardowego. Na przykład.Czy ma sens posiadanie opatrzonej adnotacjami kontrolki abstrakcyjnej klasy - wiosna MVC

klasa abstrakcyjna Kontroler:

@Controller 
    abstract class AbstractExternalController { 

    @ExceptionHandler(NoSuchRequestHandlingMethodException.class) 
    @ResponseStatus(value = HttpStatus.NOT_FOUND) 
    public @ResponseBody ResponseModel handleNotFoundException() { 
      final ResponseModel response = new ErrorModel(); 
      response.setStatus("404"); 
       response.setMessage("Resource Not Found"); 
       return response; 
      } 
... 

    } 

Kontroler Base Class

@Controller 
class ExternalControllerXXX extends AbstractExternalController { 

... 
} 

Odpowiedz

8

Nie jest konieczne opisywanie swoją klasę AbstractExternalController z @Controller anntation, chociaż, pozostawiając go nie złamie byle co. Bez względu na to, czy masz adnotację @Controller, z pewnością możesz mieć adnotacje metody i będą działać. Twoje rozszerzenie zostanie dodane do kontekstu aplikacji (ponieważ ma adnotację z adnotacją streotype), a adnotacje @ExceptionHandler i @ResponseStatus będą honorowane.

+1

Dzięki za szybką odpowiedź Mikołaja. Masz absolutną rację, jeśli nie komentujesz abstrakcyjnej klasy za pomocą @Controller, ale to nie boli, ponieważ pomaga zauważyć, że klasa jest przeznaczona dla klas Controller. – MasterV