3

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

4

2 回答 2

2

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

请注意,在封面后面,PostSharp 生成的胶水代码是强类型的。但是当暴露于方面代码时,一切都被向下转换为一个对象。

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

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

于 2012-07-08T09:55:04.450 回答
1

另一个用例是自动生成一些样板文件以使类可通过 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 转换为空返回值。

于 2012-07-04T15:16:37.437 回答