2014-01-11 125 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我也在使用注释,请参阅编辑。 –