是否可以在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子模块中的(仅)测试用例。
答案 0 :(得分:2)
不,Spring AOP不支持它。我看到两个选择:
DeclareMixinIntroductionInterceptor
。 我认为PropertyChange
接口更适合Aspectj,因为通常你会为原型bean创建很多代理,并且可以通过ORM轻松地在框架之外创建它们。
修改强>
但是我也对这个功能感兴趣,并且我已经做了一些使用它的工作:
DeclareMixin
注释的DeclareMixinAspectJAdvisorFactory。要使用它,您只需要声明DeclareMixinAutoProxyCreatorConfigurer类型的bean
使用AnnotationAwareAspectJAutoProxyCreator
配置AdvisorFactory
。
我只是在测试,但似乎工作正常。