2017-02-14 24 views
0

Я хочу условно создать Aspect в зависимости от значения, считанного из файла свойств. (Это связано с профилированием, поэтому предполагаемое выборочное использование).Использование @Aspect с @Conditional

Я попытался создать класс, который реализует Condition и, следовательно, метод matches(), который позволил бы мне выполнить проверку необходимой и установить выход в соответствующем Boolean, включить или отключить его.

@Aspect 
@Conditional(MyCondition.class) 
public class MyAspect { 
... 
pointCuts, methods and etc... 
... 
} 

вещь заключается в следующем: Aspect инстанциируется к весне в любом случае, очевидно, он не уважает выход @Conditional аннотаций.

Есть ли какие-либо оговорки, которые мне не хватает здесь?

Версии:

Spring version: 4.1.4.RELEASE 

AspectJ version: 1.7.3 

(Дерево зависимостей проекта немного «сложно», поэтому обновляемые LIBS должно быть принято с зерном соли :))

+1

Это '@ Aspect', а не' @ Component' .. Так что это, вероятно, не сканируется, и вы можете даже не иметь обработки аннотаций подарок. –

ответ

1

Вы можете управлять для того чтобы достигнуть условной Aspect Behaviour, если вы зарегистрируете свой аспект в качестве компонента, как описано в конфигурации @EnableAspectJAutoProxy.

Из документов:

Обеспечивает поддержку для обработки компонентов, отмеченных @Aspect аннотаций в AspectJ, подобной функциональности нашел в элементе XML в Spring. Используется на @Configuration

Отметьте, что @ Аспекты beans могут быть отсканированы по компонентам, как и любые другие. Просто отметьте аспект как с @Aspect, так и с @Component:

Таким образом, ваша проблема должна быть решена путем добавления @Component к вашему bean-компоненту и настройки надлежащего сканирования компонентов, если это необходимо.

Например:

@Aspect 
@Component 
@Conditional(MyCondition.class) 
public class MyAspect { 
... 
pointCuts, methods and etc... 
... 
}