打字/通用方面值得付出努力吗?

时间:2012-07-02 15:05:09

标签: spring aop aspectj postsharp

我对类型/通用方面做了一些研究。关于方面的一个重要事实是遗忘。因此,这些方面的关注点应该与域关注点正交。尽管如此,仍有研究使用泛型来使AspectJ类型安全(StrongAspectJ)/引入每类型方面。一篇论文提到了Flyweight模式的一个实现方面。现在我想知道泛型方面是否有更多用例?

2 个答案:

答案 0 :(得分:2)

PostSharp是弱类型的,即建议查看参数并将值返回为“对象”。 PostSharp中的泛型方面有一些支持(方面可以是泛型类),但它不是很有用,因为建议是弱类型的。

请注意,在封面后面,PostSharp生成的胶水代码是强类型的。但是当暴露于宽高比代码时,所有内容都会向下转换为对象。

我正在考虑在下一版本的PostSharp中实现强类型建议,可能支持泛型参数。原因是运行时性能,因为将值类型装入对象会带来相当大的性能开销。请注意,泛型在.NET中的实现方式与在Java中的实现方式不同,因此可能需要在两个平台上以不同方式讨论这一点。

如果您需要任何论文帮助,请随时与我联系。

答案 1 :(得分:1)

自动生成一些样板到make a class callable via RMI是另一个用例。该示例为一堆方法实现了一些建议。

pointcut callsToServer(Type T):
    call(public T Server.*(..)) && this(Client)
T around(Type T): callsToServer(T) {
    T obj = null;
    try {
        obj = proceed();
    } catch (java.rmi.RemoteException ex) {}
    return obj;
}

泛型允许你说"我们将返回方法签名所说的相同类型的对象"。当然,如果我们只返回对象,这是事实。投掷"我们或许可以做"类似的事情。建议,但我们无法操纵返回值将RemoteException转换为空返回值。