2014-05-21 29 views
7

La classe CDI BeanManager ha diversi metodi che utilizzano i parametri del tipo Annotation o Annotation.... Ad esempio BeanManager.getBeans(...).Come passare un'annotazione come parametro?

Mi piacerebbe sapere come dovrei passare le mie annotazioni come parametri a quei metodi.

Ho provato BeanManager.getBeans(MyBean.class, MyAnnotation.class), ma non funziona in questo modo. Ho visto Class.isAnnotation(), ma non c'è niente come Class.asAnnotation() per recuperarlo come un tipo Annotation.

BeanManager.getBeans(MyBean.class, @MyAnnotation) funzionava, né BeanManager.getBeans(MyBean.class, (Annotation) MyAnnotation.class).

Come posso recuperare la mia classe di annotazione come tipo Annotation?

+0

Non è chiaro cosa stai cercando di fare. BeanManager.getBeans (...) restituisce istanze bean del tipo specificato. Se stai provando a leggere le annotazioni, devi utilizzare la reflection come descritto da @Hirak. –

risposta

7

C'è un esempio nella documentazione:

beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {}); 

Fonte: 16.6. The Bean interface

+2

Questo ha fatto il trucco. È una specie di soluzione strana, però. Pensavo che l'API Java standard avrebbe offerto qualcosa di più comodo. – noone

0

è necessario utilizzare

getAnnotation (Classe annotationClass) Restituisce annotazione di questo elemento per il tipo specificato se tale annotazione è presente, altro nullo.

O ciclo attraverso

getAnnotations() restituisce tutte le annotazioni presenti su questo elemento.

Per ottenere l'annotazione. .

object.getClass() getAnnotations()

javadoc

+0

Non sono sicuro di ciò che chiamerei uno di quei metodi. Sulla classe di annotazione stessa? – noone