0

我正在尝试使用 Spring 框架为一个类(让我们称之为 C)动态实现一个特定的接口(让我们称之为 I)。在 Spring 中,这称为引入(其他语言中的 mixin)。在编译时,C 没有实现 I。使用 @DeclareParents 注释我可以在 AspectJ 语法中做到这一点。

问题是 I 的实际实现(我们称之为 IImpl)是独立的(不依赖于上下文)——我应该只在注释中提供 IImpl 类名。我想要实现的是以某种方式规定的实现。例如,我想为 IImpl 实例提供一个参数,比如封闭的 C 实例,以便 IImpl 中的逻辑会根据所引入的 CI 实例而有所不同。我需要一些方法来设置 IImpl 实例和引入的 C 实例之间的依赖关系。

目前我找不到办法做到这一点。有任何想法吗?

谢谢。

4

1 回答 1

2

恐怕您正在寻找的解决方案的“形式”是不可能的,因为 AJ 字节码编织器(编译或加载时间无关紧要)需要知道如何“实现”您的方法。但是,我认为委托人的形式可能会解决您的问题。基本上,您将告诉 C 使用 IImpl 实现接口 I 并使用 IImpl 作为委托器,这意味着 IImpl 会将所有方法调用委托给可以在运行时配置/更改的 IRuntimeImpl。IImpl 基本上是:

public class IImpl implements I {
    private I delegate;

    public void interfaceMethod() {
        delegate.interfaceMethod()
    }
}

在运行时,您将能够将您为 I 选择的任何运行时实现传递给 IImpl。

./亚历克斯

于 2009-02-23T12:00:57.507 回答