gpt4 book ai didi

java - @DeclareMixin 使用 Spring AOP?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:12 27 4
gpt4 key购买 nike

是否可以将 @DeclareMixin 与 Spring AOP 一起使用?或者他们只支持@DeclareParents?

我想编写一个将 java.beans.PropertyChangeSupport 混合到 java bean 中的方面:

public class PropertyChangeSupportWithInterface extends PropertyChangeSupport
implements IObservableBean {

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

(IObservableBean 仅包含 PropertyChangeSupport 中的所有公共(public)方法)

@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-observable-bean-aspect 子模块中的(唯一)测试用例。

最佳答案

不,Spring AOP 不支持开箱即用。我看到两个选项:

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

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

编辑

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

要使用它,您只需要声明一个类型为 DeclareMixinAutoProxyCreatorConfigurer 的 bean。用于使用上面的 AdvisorFactory 配置 AnnotationAwareAspectJAutoProxyCreator

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

关于java - @DeclareMixin 使用 Spring AOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com