我在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有关吗?
答案 0 :(得分:0)
Cglib在创建代理时会生成您的类的子级。所以,如果' myclass'在你的例子中,通过someCglibObject.getClass()
获得了cglib子类,而不是你的。
在这种情况下,要通过childClass.getAnnotationsByType
使父类上声明的注释可用,您应该使用@Inherited