Mam dużo kodu boilerplate że w zasadzie zachowuje ten wzór:Java adnotacji do owijania metody
function doSomething() {
try {
[implementation]
[implementation]
[implementation]
[implementation]
} catch (Exception e) {
MyEnv.getLogger().log(e);
} finally {
genericCleanUpMethod();
}
}
Chciałbym stworzyć własną adnotacji oczyścić mój kod się trochę:
@TryCatchWithLoggingAndCleanUp
function doSomething() {
[implementation]
[implementation]
[implementation]
[implementation]
}
Sygnatury metod różnią się znacznie (w zależności od rzeczywistej implementacji metody), ale część wypalania/catch/finally jest zawsze taka sama.
Adnotacja, którą mam na myśli, automatycznie zawinąłaby zawartość opisanej metody z całym hoopla try...catch...finally
.
Przeszukałem wysokie i niskie w prosty sposób, ale nic nie znalazłem. Nie wiem, może po prostu nie widzę lasu dla wszystkich opisywanych drzew.
Wszelkie wskazówki dotyczące tego, w jaki sposób mogę wprowadzić taką adnotację, byłyby mile widziane.
Wydaje mi się, że adnotacja nie byłaby konieczna; możesz po prostu przekazać implementacje, które definiują 'implementationOfDoSomething()' i (opcjonalnie, być może) 'genericCleanUpMethod()' jako argumenty funkcji 'doSomething()', wywołaj je wewnątrz 'try/catch/finally', a następnie po prostu wywołaj' doSomething() 'kiedy potrzebujesz logiki standardowej? –
Twoja odpowiedź leży w AOP, czy to zbadałeś? – smp7d
Moje zrozumienie polega na tym, że ma tę samą metodę/catch/finally na wielu metodach. Tak więc nie ma tu tylko jednego zadania, ale bardziej przypominającego DoSomething1, DoSomething2, ... wszystko z tą samą próbą/catch/wreszcie, że chce wyodrębnić do adnotacji – jeff