In Spring Boot (Spring MVC) durchläuft ein Request den Servlet-Container, eine Kette von Filtern, das zentrale DispatcherServlet, dann Interceptors und deinen @Controller, und der Rückgabewert wird in die HTTP-Response umgewandelt.
In Spring Boot (Spring MVC) durchläuft ein Request den Servlet-Container, eine Kette von Filtern, das zentrale DispatcherServlet, dann Interceptors und deinen @Controller, und der Rückgabewert wird in die HTTP-Response umgewandelt.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── der Front Controller
▼
HandlerMapping ── finde die @Controller-Methode
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── deine Logik → gibt object oder ResponseEntity zurück
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── zu JSON serialisieren oder view rendern
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter-Kette. Filter (einschließlich Spring Security) sind die äußerste Schicht und können den Request blockieren oder umhüllen, bevor MVC ihn sieht.preHandle — HandlerInterceptors laufen vor dem Controller (Auth-Prüfungen, Logging, Timing); die Rückgabe von false stoppt den Request.@PathVariable, @RequestParam und @RequestBody (über HttpMessageConverter) werden gebunden und validiert.@RestController-Methode führt die Geschäftslogik aus und gibt ein object oder ResponseEntity zurück.postHandle, dann wird der Rückgabewert von einem HttpMessageConverter (JSON via Jackson) serialisiert oder ein View von einem ViewResolver gerendert.afterCompletion läuft, nachdem die Response committet wurde; @ExceptionHandler/@ControllerAdvice behandeln Ausnahmen unterwegs.// 4/7/8. interceptor
public class TimingInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object h) {
req.setAttribute("started", System.nanoTime());
return true; // false = abkürzen
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. Argument-Auflösung
return ResponseEntity.ok(service.find(id)); // 7. zu JSON serialisiert
}
}
Springs Lebenszyklus hat zwei unterschiedliche Erweiterungsschichten, die Interviewer gerne abklopfen: Filter (auf Servlet-Ebene, ganz außen — wo Spring Security lebt) und Interceptors (auf Spring-MVC-Ebene, um den Controller herum). Die Reihenfolge zu kennen — Filter, DispatcherServlet, Mapping, Interceptor preHandle, Argument-Binding, Controller, Message-Konvertierung, afterCompletion — sagt dir, wo du Authentifizierung vs. Logging platzierst, warum ein Security-Filter einen Request ablehnt, bevor irgendein Interceptor oder Controller läuft, und wie @ControllerAdvice die Ausnahmebehandlung über den gesamten Ablauf zentralisiert.
Eine Sammlung von IT-Interviewfragen mit ausführlichen Antworten — vom Junior bis zum Senior.
Spenden