Diciamo che ho un metodo che genera un'eccezione di qualche tipo. Il codice di lancio delle eccezioni si trova in una libreria di terze parti che accede a un servizio esterno. Ho alcune classi che fanno un buon lavoro con i servizi esterni e c'è un sacco di gestione delle eccezioni in tutto per far fronte a potenziali problemi. Il problema che sto colpendo è che potrei avere molte eccezioni, ma potrei aver bisogno solo di eseguire una delle poche azioni se ce n'è una, e ci sono un sacco di blocchi try/catch disseminati. Il tipo di eccezione potrebbe non essere nemmeno pertinente, o metodi diversi possono lanciare lo stesso tipo di eccezione, ma è necessario intraprendere azioni diverse a seconda del metodo che la lancia.Utilizzo delle annotazioni per la gestione delle eccezioni?
Quello che sto cercando è un'annotazione che può soppiantare try/catch e dettare semplicemente il comportamento da adottare quando c'è un'eccezione in quel metodo. So che Spring ApsectJ può fare questo genere di cose, ma al momento non sono in grado di aggiungere facilmente nuove dipendenze o modificare il pom per regolare quelle esistenti. Come tale, spero che questo possa essere realizzato con un'annotazione personalizzata. Ad esempio:
@Catcher(action=SomeEnum.SOME_ACTION)
public void doSomething(ServiceObj obj) throws SomeException {
ExternalService.makeThingsHappen(obj);
}
Suppongo che una classe separata gestisca le eccezioni, ovviamente. Un'altra difficoltà è che avrei bisogno anche del ServiceObj. Se makeThingsHappen() fallisce, potrei aver bisogno di obj per eseguire ulteriori azioni. La variabile action dirà alla classe del gestore cosa fare con obj.
Questo può essere fatto senza grave muckery, o sto sperando in qualcosa che potrebbe non esistere?
Le annotazioni non aggiungono un comportamento autonomo. Sono metadati. È necessario fornire un parser per loro che possa aggiungere quel comportamento se li trova. –
Lo definirei un piccolo muckery; può essere gestito banalmente con AOP o manipolazione di codice byte. –