Имя класса Java как атрибут аннотации

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

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

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

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


person Rasmus Franke    schedule 19.08.2013    source источник


Ответы (1)


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

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

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

person Raji    schedule 19.08.2013
comment
Если я в какой-то момент переименую этот класс, я хотел бы обеспечить безопасность времени компиляции. Строку пришлось бы менять вручную, а ссылка на имя класса либо рефакторилась бы автоматически, либо выдавала бы ошибку таймера компиляции. - person Rasmus Franke; 19.08.2013