2014-01-11 126 views
2

在Spring AOP中可以使用@DeclareMixin嗎?或者他們只支持@DeclareParents?@DeclareMixin with 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); 
    } 
} 

它似乎這個方面從來沒有使用過,這讓我認爲@DeclareMixin不被Spring AOP完成的運行時編織支持。

有沒有辦法得到這個工作Spring AOP實現的?

你可以找到一個(不)運行例如這裏(Maven的多模塊項目):

https://github.com/BernhardBln/SpringAOPObservableBean

見(只)的測試情況下,在springaop觀察的豆縱橫子模塊。

回答

1

不,它不受Spring AOP的支持。我看到兩個選項:

  • 爲Spring AOP創建DeclareMixinIntroductionInterceptor
  • 切換到AspectJ的

我認爲PropertyChange接口適合在AspectJ更好,因爲通常你會創建原型豆類很多代理和他們可以很容易地創造出骨架,例如通過一個ORM。

編輯

但我感興趣的是這個功能太多,我已經完成了使用它的一些工作:

要使用它,你只需要聲明類型DeclareMixinAutoProxyCreatorConfigurer 的豆用於配置AnnotationAwareAspectJAutoProxyCreator與上述AdvisorFactory

我只是測試,但似乎工作正常。

+0

嘿何塞,非常感謝您的代碼!但是,我如何在Spring中使用攔截器?我正在使用基於註釋的處理。或者只能通過xml來完成? – Bernhard

+0

@Bernhard我也在使用註釋,請參閱編輯。 –