在 CGLIB 代理上保留注释?

2022-09-02 21:10:55

我正在尝试使用使用 CGLIB 创建代理对象的 AOP 框架创建对象。奇怪的是,“增强的”代理对象没有上一个类的任何注释!

谁能告诉我如何让CGLIB保留它创建的代理上的注释?

干杯!尼拉夫


答案 1

CGLIB 创建给定类的子类来生成代理。除非在注释定义中显式指定,否则不会在子类中保留注释。@Inherited注释用于此目的。

您可以在定义的批注中使用此批注,并使它们在子类中可访问,如下所示:

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
}

答案 2

这不是“保留”注释的问题。CGLIB 代理实际上是目标对象类的生成子类。这些子类可能没有注释,但它们的超类(即你自己的类)仍然会有注释。您使用的任何反映批注的代码都需要能够查找类层次结构以查找批注。


推荐