Person hinzufügen/bearbeiten

Fülle das Formular aus und speichere die Person

Formular

❌ Abbrechen

💡 Was passiert beim Speichern?

1. Controller empfängt Daten

PersonViewController empfängt das Formular
@PostMapping("/persons/add")

2. Service wird aufgerufen

personService.createPerson(person)
Spring injiziert InMemoryPersonService

3. AOP tritt in Aktion

Logging: → Calling createPerson
Performance: ⏱️ took 2ms
Logging: ← Finished createPerson

🚀 Tipp für Fortgeschrittene
Öffne die Console und beobachte die Log-Ausgaben!
Du siehst exakt, wie AOP die Service-Methoden umschließt.

📝 Der Code dahinter

Controller (Constructor Injection)

@Controller
@RequiredArgsConstructor
public class PersonViewController {
    private final PersonService personService;
    
    @PostMapping("/persons/add")
    public String addPerson(@ModelAttribute Person person) {
        personService.createPerson(person);
        return "redirect:/persons";
    }
}

Service (mit @Timed Annotation)

@Timed  // Performance-Messung aktiviert!
public Person createPerson(Person person) {
    person.setId(idCounter.getAndIncrement());
    persons.add(person);
    return person;
}

Aspect (Automatische Performance-Messung)

@Around("@annotation(com.javafleet.springboot.annotation.Timed)")
public Object measurePerformance(ProceedingJoinPoint joinPoint) {
    long start = System.currentTimeMillis();
    Object result = joinPoint.proceed();
    long duration = System.currentTimeMillis() - start;
    log.info("⏱️ {} took {}ms", methodName, duration);
    return result;
}