2013-08-04 2 views
0

Я пытаюсь установить атрибут logTime в своей аннотации весной xml. Я вижу, что это не так просто, как я думал.установка атрибутов аннотации весной xml

@Component 
@Retention(RetentionPolicy.RUNTIME) 
public @interface LogExecTime { 

public boolean logTime() default true;  
} 

Я попытался использовать @Value аннотацию с интерфейсом не повезло:

I) 

    @Component 
    @Retention(RetentionPolicy.RUNTIME) 
    public @interface LogExecTime { 
    @Value("#{ConfigureAnnotation.doLogging}") 
public boolean logTime() default true;  
    } 

, а также

II)  
@LogExecTime([email protected]("#{ConfigureAnnotation.doLogging}")) 

Любые идеи, как я могу сделать это на уровне XML или это невозможно при инъекции зависимостей аннотации?

ответ

1

Да, это никогда не сработает.

@LogExecTime([email protected]("#{ConfigureAnnotation.doLogging}")) 

никогда не будет скомпилирован. Аннотации не являются исполняемым кодом, они всего лишь маркеры - дополнительный бит информации, которые вставляются в общую игру класса.

Вы можете либо поставить это:

@Value("#{ConfigureAnnotation.doLogging}") 
boolean logTime = true; 

Как вещественное поле на пружине управляемый компонент где-нибудь, или изменить аннотацию быть похожим:

@Component 
@Retention(RetentionPolicy.RUNTIME) 
public @interface LogExecTime { 

    public String logTime() default "true"; 
} 

и есть то, что представляет собой обработку, аннотация во время выполнения также принимает выражение весны EL и разрешает его соответствующим образом, и ваш компонент будет выглядеть следующим образом:

@LogExecTime(logTime = "#{ConfigureAnnotation.doLogging}") 
public class SomeComponent { 

    // blah blah blah 
} 
+0

Привет Iscoughlin. @Value("#{ConfigureAnnotation.doLogging}") boolean logTime = true; не работает внутри аннотации для меня, но logTime = "#{ConfigureAnnotation.doLogging}" выглядит так, как мог. Мой Aspect читает его, но просто печатает "# {ConfigureAnnotation.doLogging}", а не значение "true", которое я установил в xml. Не могли бы вы показать мне, как вы достигнете этого? – MWright

+0

Вам нужно сделать что-то со значением, назначенным аннотации. В этом случае значение равно # {ConfigureAnnotation.doLogging} Таким образом, вам нужно либо создать экземпляр весеннего EL-резольвера, чтобы разрешить это значение, либо разобрать ключ самостоятельно, и что-то с ним, например System.getProperty (аннотация .value(). substring (2, annotation.value(). size() -3) – lscoughlin

Смежные вопросы