Java 如何使方法返回类型成为AspectJ ITD中的当前类型?
我需要将Java 如何使方法返回类型成为AspectJ ITD中的当前类型?,java,aop,aspectj,Java,Aop,Aspectj,我需要将save()方法引入到使用我的@Persistent注释注释的任何类型。此方法只需将对象保存到基础数据库中,并返回对象的副本及其行id(例如Person personSaved=Person.save()) 为此,我使用AspectJ编写了给定方面(PersistentObject是一个提供save()方法的接口): 上面的代码看起来不错。但是我的问题是save()方法的返回类型。我想将其声明为实际类型,由@Persistent(例如Person)注释,而不是PersistentObje
save()
方法引入到使用我的@Persistent
注释注释的任何类型。此方法只需将对象保存到基础数据库中,并返回对象的副本及其行id(例如Person personSaved=Person.save()
)
为此,我使用AspectJ编写了给定方面(PersistentObject
是一个提供save()
方法的接口):
上面的代码看起来不错。但是我的问题是save()
方法的返回类型。我想将其声明为实际类型,由@Persistent
(例如Person)注释,而不是PersistentObject
你有办法解决我的问题吗?提前谢谢。我知道你想要什么。技术上的答案很简单:不 OTOH,我认为这不是一个很大的损失,因为您想要的似乎不是好的应用程序设计:
- 您希望
返回一个有点违反直觉的对象,因为它不是getter。为什么要返回已拥有的对象?我希望save()
具有save()
返回类型void
- 与针对特定类的开发相比,针对接口的开发不是更干净、更好吗?如果您返回了什么,我想接口类型并不是一个糟糕的选择
public aspect PersistencyAspect {
declare parents: (@Persistent *) implements PersistentObject;
public PersistentObject PersistentObject.save() {
// perform the save operation and return a copy of this
}
}