@DeclareMixin与Spring AOP?

时间:2014-01-11 00:12:35

标签: java aop mixins spring-aop

是否可以在Spring AOP中使用@DeclareMixin?或者他们只支持@DeclareParents吗?

我想编写一个将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);
    }
}

似乎从未使用过这个方面,这让我觉得Spring AOP完成的运行时编织不支持@DeclareMixin。

有没有什么方法可以使用Spring AOP?

你可以在这里找到一个(不)运行的例子(Maven多模块项目):

https://github.com/BernhardBln/SpringAOPObservableBean

请参阅springaop-observable-bean-aspect子模块中的(仅)测试用例。

1 个答案:

答案 0 :(得分:2)

不,Spring AOP不支持它。我看到两个选择:

  • 为Spring AOP创建DeclareMixinIntroductionInterceptor
  • 切换到Aspectj

我认为PropertyChange接口更适合Aspectj,因为通常你会为原型bean创建很多代理,并且可以通过ORM轻松地在框架之外创建它们。

修改

但是我也对这个功能感兴趣,并且我已经做了一些使用它的工作:

要使用它,您只需要声明DeclareMixinAutoProxyCreatorConfigurer类型的bean 使用AnnotationAwareAspectJAutoProxyCreator配置AdvisorFactory

我只是在测试,但似乎工作正常。