2014-01-11 4 views
2

Можно ли использовать @DeclareMixin с Spring AOP? Или они поддерживают только @DeclareParents?@ DeclareMixin с Spring AOP?

Я хочу написать аспект, который смешивает в java.beans.PropertyChangeSupport в Java Bean:

public class PropertyChangeSupportWithInterface extends PropertyChangeSupport 
    implements IObservableBean { 

    public PropertyChangeSupportWithInterface(Object sourceBean) { 
    super(sourceBean); 
    }  
} 

(IObservableBean просто содержит все публичные методы из PropertyChangeSupport)

@Aspect 
@Named 
public class ObservableAspect{ 
    @DeclareMixin("@ObservableBean *") 
    public static IObservableBean createDelegate(Object object) { 
     return new PropertyChangeSupportWithInterface(object); 
    } 
} 

It кажется, что этот аспект никогда не используется, что заставляет меня думать, что @DeclareMixin не поддерживается трением, выполняемым Spring AOP.

Есть ли способ заставить это работать с Spring AOP?

Вы можете найти (не) работает здесь пример (проект несколько модулей Maven):

https://github.com/BernhardBln/SpringAOPObservableBean

Смотрите (только) тестовый случай в springaop-наблюдаемой-боб аспект субмодуле.

ответ

1

Нет, это не поддерживается Spring AOP из коробки. Я вижу два варианта:

  • Создайте DeclareMixinIntroductionInterceptor для Spring AOP.
  • Переключить на AspectJ

Я думаю, что PropertyChange интерфейс лучше подходит в AspectJ, потому что обычно вы будете создавать много прокси для опытных образцов бобов и их можно было бы легко создать из рамок, по ОРМ, например.

Редактировать

Однако я заинтересован в этой функции тоже, и я уже сделал некоторую работу для пользы он:

Для этого вам нужно всего лишь объявить боб типа DeclareMixinAutoProxyCreatorConfigurer для настройки AnnotationAwareAspectJAutoProxyCreator с выше AdvisorFactory.

Я просто тестирую, но, похоже, работает нормально.

+0

Привет, большое спасибо за ваш код! Но как я могу использовать перехватчик весной? Я использую обработку на основе аннотаций. Или это можно сделать только через xml? – Bernhard

+0

@ Бернхард Я тоже использую аннотации, см. Edit. –