当我介绍AOP时,Spring Class.getAnnotationsByType无法正常工作

时间:2016-03-01 14:20:52

标签: spring aop

我在Spring中有一个带有自定义注释的Bean。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CliCommand {
    Slice slice();
}

在运行时(启动)期间,我想加载所有具有此批注的类。

在此过程中,我打电话。

CliCommand[] cliAnnotations = myclass.getAnnotationsByType(CliCommand.class);

在我介绍AOP之前,它运作良好。

但是现在返回NULL。

我的AOP看起来像这样。

@Pointcut("within(com.companyx.cli..*)")
public void cliLayer() {
}

@Before("cliLayer()")
public void injectCLI(JoinPoint jp){
    MDC.put(ConnectApplicationContext.LOG_LAYER_NAME, Layer.CLI);
}

我不确定为什么会这样。谁看过这个吗。它与cgLib有关吗?

1 个答案:

答案 0 :(得分:0)

Cglib在创建代理时会生成您的类的子级。所以,如果' myclass'在你的例子中,通过someCglibObject.getClass()获得了cglib子类,而不是你的。

在这种情况下,要通过childClass.getAnnotationsByType使父类上声明的注释可用,您应该使用@Inherited

注释自定义注释