我正在尝试使用Spring框架为一个类动态实现一个特定的接口(让我们称之为)(让我们称之为C)。在Spring中,这称为简介(mixin在其他语言中)。在编译时C没有实现I.使用@DeclareParents注释我可以在AspectJ语法中完成。
问题是I的实际实现(让我们称之为IImpl)是独立的(不依赖于上下文) - 我应该只在注释中提供IImpl类名。我想要实现的是以某种方式规定的实现。例如,我想为IImpl实例提供一个参数,比如封闭的C实例,以便IImpl中的逻辑根据我引入的C实例而有所不同。我需要一些方法来设置IImpl实例和引入的C实例之间的依赖关系。
目前我无法找到办法。有什么想法吗?
感谢。
答案 0 :(得分:2)
我担心你正在寻找的解决方案的'形式'是不可能的,因为AJ字节码编织器(如果编译或加载时间无关紧要)需要知道如何“实现”你的方法。 但是,我认为可能会以委托人的形式为您的问题提供解决方案。基本上,您将告诉C使用IImpl实现接口I并使用IImpl作为委托者,这意味着IImpl将所有方法调用委托给可在运行时配置/更改的IRuntimeImpl。 IImpl基本上是:
public class IImpl implements I {
private I delegate;
public void interfaceMethod() {
delegate.interfaceMethod()
}
}
在运行时,您将能够将您选择的任何运行时实现传递给IImpl。
./亚历