2012-02-02 11 views
7

L'annotazione Spring @Async può essere utilizzata sui metodi di interfaccia (quindi tutte le implementazioni di quell'interfaccia avranno implicitamente @Async in tale metodo) o possono essere utilizzate solo su classi concrete?Spring @Anteprima sincronizzata sui metodi di interfaccia

+0

Hai provato? –

+0

Ho provato ad annotare un metodo di interfaccia (e lo ho compilato), ma preferisco scoprire se effettivamente funzionerà prima di iniziare ad implementare le classi concrete – Alex

+1

Nel caso in cui si usi il proxy cglib invece del proxy jdk e si annoti con @Async sull'interfaccia potrebbe non funzionare – shrini1000

risposta

9

Ho provato rapidamente e avendo @Async su un'interfaccia renderà l'implementazione asincrona.

Se volete provare voi stessi: Si può facilmente verificare questo controllando che i valori di Thread.currentThread().getId() sono diversi (prima di chiamare il metodo e all'interno del metodo) o semplicemente l'aggiunta di un Thread.sleep(10000); nel metodo dovrebbe essere asincrono.

Inoltre prendere nota del tipo di reso deve essere void o java.util.concurrent.Future.

3

Da @Async è defined come

@Target(value={TYPE,METHOD}) 
@Retention(value=RUNTIME) 
@Documented 
public @interface Async 

e TYPEis

classe, interfaccia (incluso il tipo di annotazione), o enum dichiarazione

e METHODis

dichiarazione di metodo

sì, è possibile utilizzarlo su metodi di interfaccia, anche.

+11

ma renderà _actually_ anche l'implementazione asincrona? :) –

+0

si. renderà tutte le sue implementazioni Async – maya16

Problemi correlati