如何将方法返回类型作为AspectJ ITD中的当前类型?

时间:2013-03-19 12:02:31

标签: java aop aspectj

我需要将save()方法引入任何使用@Persistent注释注释的类型。此方法只是将对象保存到底层数据库中,并返回该对象的副本及其行ID(例如Person personSaved = person.save()

为此,我使用AspectJ编写了给定的方面(PersistentObject是一个提供save()方法的接口):

public aspect PersistencyAspect {
    declare parents: (@Persistent *) implements PersistentObject;

    public PersistentObject PersistentObject.save() {
        // perform the save operation and return a copy of this
    }
}

上面的代码看起来不错。但我的问题是save()方法的返回类型。我想将其声明为@Persistent(例如Person)而不是PersistentObject注释的实际类型。

你有解决我的问题的方法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我明白你想要什么。技术答案很简单:没有。

OTOH,我认为这不是一个很大的损失,因为你想要的东西似乎并不是一个好的应用程序设计:

  • 您希望save()返回一个反直觉的对象,因为它不是一个getter。为什么要返回已有的物体?我希望save()有一个void返回类型。
  • 针对接口而不是针对特定类开发是不是更清洁,更好?如果你返回任何东西,我想界面类型不是一个糟糕的选择。