Myślę, że najlepszym przykładem przekrojowego problemu jest zachowanie transakcyjne. Na przykład konieczność umieszczania bloków try-catch z wywołaniami commit i rollback we wszystkich metodach usług byłaby odstraszająca. Oznaczanie metod znacznikiem, którego AOP może użyć do hermetyzacji ich pożądanym zachowaniem transakcyjnym, to duża wygrana.
Innym dobrym kandydatem będącym przykładem problemu przekrojowego jest zezwolenie. Dodawanie adnotacji do metody usługi znacznikiem, który mówi, kto może ją wywołać, i pozwolenie niektórym poradom AOP zdecydować, czy zezwolić na wywołanie metody, czy nie, może być lepsze niż obsługa tego w kodzie metody usługi.
Wdrożenie rejestrowania z poradami AOP może być sposobem na uzyskanie większej elastyczności, dzięki czemu można zmienić to, co jest rejestrowane, zmieniając punkt złączenia. W praktyce nie widzę projektów, które tak często robią. Zwykle użycie biblioteki, takiej jak log4j, która umożliwia filtrowanie według poziomu logowania i kategorii, w czasie wykonywania, jeśli zajdzie taka potrzeba, działa wystarczająco dobrze.
Podstawowym problemem jest przyczyna istnienia aplikacji, logika biznesowa, którą aplikacja automatyzuje. Jeśli masz aplikację logistyczną, która obsługuje przewozy ładunków, kluczową kwestią może być ustalenie, ile ładunku można zapakować na ciężarówkę lub jaka jest najlepsza trasa, na którą samochód ciężarowy ma wysadzić swoje dostawy. Kwestie przekrojowe to zazwyczaj szczegóły dotyczące implementacji, które muszą być oddzielone od logiki biznesowej.