2013-08-19 1 views
6

È possibile utilizzare il nome semplice di una classe all'interno di un'annotazione? Il mio obiettivo è quello di ottenere la sicurezza del tempo di compilazione per le iniezioni usando i nomi JNDI che contengono la classe.Nome classe Java come attributo di annotazione

Esempio (di ciò che voglio fare, questo non riesce al momento della compilazione):

@EJB(mappedName = "java:module/" + MyService.class.getSimpleName()) 
private MyService myService; 

class.getSimpleName() sembra essere risolto in fase di esecuzione, che non funziona con le annotazioni. Posso ottenerlo come costante in qualche modo?

risposta

0

Non possibile nel modo in cui lo avete. Può essere fatto con le tecniche AOP. Ma,

@EJB(mappedName = "java:module/" + MyService.class.getSimpleName()) 
private MyService myService; 

In questo pezzo di codice sembra che tu abbia solo un possibile valore vale a dire "MyService". Non cambierà in modo dinamico, quindi perché vuoi valutarlo in modo dinamico?

+3

Se a un certo punto si rinomina questa classe, vorrei la sicurezza della compilazione del tempo. Una stringa dovrebbe essere modificata manualmente, mentre un riferimento al nome della classe dovrebbe essere automaticamente refactored o darebbe un errore del timer di compilazione. –