2012-02-12 11 views
6

Comincerò con un pezzo di codiceannotazione, che invoca un metodo

class Clazz { 

    public void doSomething() { 
     ... 
     check(); 
    } 

    public void doSomethingElse() { 
     ... 
     check(); 
    } 

    ... // etc., these methods look basically the same - they all call check() at the end 
} 

E 'possibile annotare metodi come @Checked che causerebbe per chiamare il check() alla fine? E se lo è, puoi fornire alcuni esempi?

+1

Non è possibile facilmente. Ma la domanda è: cosa otterresti ad eccezione della confusione? –

+0

@JBNizet Voglio solo sapere se è possibile e se no imparo qualcosa di nuovo. Il mio problema attuale è molto più complicato e spero di essere in grado di semplificarlo con questo. – user219882

risposta

6

Sì, è possibile. Devi strumentare il tuo codice, in genere con aspetti (AOP). Controlla this example se vuoi vedere come è.

+0

La tua risposta non è corretta, il tuo 'call your method' verrà eseguito solo quando rifletti la classe e non quando viene chiamato il metodo. È possibile utilizzare Strumentazione per questo scopo (https://github.com/jboss-javassist/javassist) o avvolgere il codice in metodi generati (https://github.com/square/javapoet per esempio) – Spoke44

+0

@ Spoke44 si ' Hai ragione. Penso di aver frainteso la domanda. Non sono sicuro del motivo per cui è stato accettato e ho ottenuto più voti rispetto alla risposta corretta. – javamonkey79

3

Può essere eseguito con AOP. Dai un'occhiata a AspectJ e Dynamic Proxy. Utilizzando il proxy dinamico è possibile avvolgere la classe con un altro pezzo di codice che esegue alcune operazioni prima e dopo la chiamata al metodo effettivo.

+0

Per favore, condividi qualche esempio o link su come questo può essere ottenuto usando AspectJ/Dynamic Proxy? –

+0

@KiranAB, solo per te http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – AlexR

Problemi correlati