SpringAOP生成的动态子类缺少注释

时间:2009-07-01 14:31:49

标签: spring aop

我正在尝试使用Spring AOP将行为注入到对象中。目标对象具有单个方法,该方法是此新行为的连接点。该方法还有一个自定义注释,我希望能够从其他不相关的代码中读取。因为我的类没有实现接口,所以Spring使用CGLIB来动态地子类化目标对象。生成的子类似乎没有将注释添加到原始类中。

我尝试将@Inherited注释添加到自定义注释中,但没有运气。事实证明@Inherited只适用于类。这表明Spring必须将我的注释显式应用于子类中的重写方法。

编辑:我找到了解决方法以及有关此问题的更多信息。看起来CGLib的人都知道这个问题。注释被视为Java中的实现(而不是方法签名的一部分)。重写方法必须重新声明注释。 CGLib没有这样做(故意通过事物的声音)。

我的解决方法是改变我的反射逻辑。我在传递给我的类中搜索带注释的方法,现在我看一下这个类,它是超类。我最终使用超类(在代理的情况下)定位方法,但是当我调用该方法时,常规的polymorphisim适用。这会产生一些丑陋的反射代码(甚至比正常情况更难看)。似乎我不应该在代码中补偿SpringAOP实现细节。

看起来Spring应该提供一种更清晰的方法来处理这个问题。如果有人有其他建议,他们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您确定注释的RetentionPolicy设置为RUNTIME吗?