Στο Spring Boot (Spring MVC), ένα request περνά από τον servlet container, μια αλυσίδα από Filters, το κεντρικό DispatcherServlet, μετά τους interceptors και τον δικό σου @Controller, και η επιστρεφόμενη τιμή μετατρέπεται στην HTTP απόκριση.
Στο Spring Boot (Spring MVC), ένα request περνά από τον servlet container, μια αλυσίδα από Filters, το κεντρικό DispatcherServlet, μετά τους interceptors και τον δικό σου @Controller, και η επιστρεφόμενη τιμή μετατρέπεται στην HTTP απόκριση.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── ο front controller
▼
HandlerMapping ── βρίσκει τη μέθοδο @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── η λογική σου → επιστρέφει object ή ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── σειριοποίηση σε JSON ή render view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter. Τα Filters (συμπεριλαμβανομένου του Spring Security) είναι το εξώτερο επίπεδο και μπορούν να μπλοκάρουν ή να τυλίξουν το request πριν το δει το MVC.preHandle — οι HandlerInterceptor τρέχουν πριν τον controller (έλεγχοι auth, logging, timing)· η επιστροφή false σταματά το request.@PathVariable, @RequestParam και @RequestBody (μέσω HttpMessageConverter) γίνονται bind και επικυρώνονται.@RestController σου τρέχει την επιχειρησιακή λογική και επιστρέφει ένα object ή ResponseEntity.postHandle, και μετά η επιστρεφόμενη τιμή σειριοποιείται από έναν HttpMessageConverter (JSON μέσω Jackson) ή ένα view γίνεται render από έναν ViewResolver.afterCompletion τρέχει αφού η απόκριση γίνει commit· τα @ExceptionHandler/@ControllerAdvice χειρίζονται τις εξαιρέσεις καθ' οδόν.// 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 = διακοπή
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. ανάλυση ορισμάτων
return ResponseEntity.ok(service.find(id)); // 7. σειριοποίηση σε JSON
}
}
Ο κύκλος ζωής του Spring έχει δύο διακριτά επίπεδα επέκτασης που οι συνεντευκτές λατρεύουν να εξετάζουν: τα Filters (σε επίπεδο servlet, το εξώτερο — εκεί όπου ζει το Spring Security) και τους Interceptors (σε επίπεδο Spring MVC, γύρω από τον controller). Το να γνωρίζεις τη σειρά — filters, DispatcherServlet, mapping, interceptor preHandle, binding ορισμάτων, controller, μετατροπή μηνύματος, afterCompletion — σου λέει πού να βάλεις το authentication έναντι του logging, γιατί ένα Security filter απορρίπτει ένα request πριν τρέξει οποιοσδήποτε interceptor ή controller, και πώς το @ControllerAdvice συγκεντρώνει τον χειρισμό εξαιρέσεων σε ολόκληρη τη ροή.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά