2009-02-23 66 views
0

我想用Spring框架动态实现一个类(让我们称之为C)的特定接口(让我们称之为I)。在春天这叫介绍(mixin在其他语言)。在编译时,C没有实现I.使用@DeclareParents注解,我可以用AspectJ语法来完成。动态实现的春天介绍

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

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

谢谢。

回答

2

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

public class IImpl implements I { 
    private I delegate; 

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

在运行时,你就可以传递给IImpl任何运行时实现您挑选一

./alex

+0

但是,这正是问题 - 我该怎么办传递任何东西给IImpl?使用@DeclareParents我只能提供IImpl的类名,而我没有看到一种方法来传递它的实例的任何参数。 – Stas 2009-02-23 12:13:15