2013-08-19 2 views
6

Возможно ли использовать простое имя класса внутри аннотации? Моя цель - обеспечить безопасность времени компиляции для инъекций с использованием имен JNDI, содержащих класс.Имя класса Java в качестве атрибута аннотации

Пример (из того, что я хочу сделать, это терпит неудачу во время компиляции):

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

class.getSimpleName(), кажется, решен во время выполнения, который не работает с аннотациями. Могу ли я получить его как константу?

ответ

0

Невозможно, как у вас есть. Это можно сделать с помощью методов АОП. Но,

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

В этом фрагменте кода у вас есть только одно возможное значение, а именно «MyService». Он не изменится динамически, так почему вы хотите его динамически оценивать?

+3

Если я в какой-то момент переименую этот класс, я бы хотел скомпилировать время безопасности. Строку нужно будет изменить вручную, в то время как ссылка на имя класса будет либо реорганизована автоматически, либо даст ошибку таймера компиляции. –