Spring AOP zwykle działa przez proxy wokół beana. Gdy metoda w tej samej klasie wywoła inną „aspektowaną” metodę bezpośrednio (`this.someMethod()`), omija proxy, więc np. `@Transactional` może się nie zadziałać.
Spring AOP jest zwykle **oparte o proxy**:
Proxy przechwytuje wywołania **idące przez proxy**. Gdy kod w beanie wywołuje metodę na `this`, nie wychodzi poza obiekt docelowy, więc proxy nie ma szans tego przechwycić.
@Service
class BillingService {
@Transactional
public void pay() { /* ... */ }
public void run() {
this.pay(); // omija proxy -> brak transakcji
}
}