【问题标题】:custom annotations && aspects error java.lang.IllegalArgumentException: error Type referred to is not an annotation type自定义注解 && 方面错误 java.lang.IllegalArgumentException: error Type referenced is not an annotation type
【发布时间】:2019-08-11 02:17:27
【问题描述】:

我正在尝试围绕自定义注释进行制作和方面。 我有这个注释:

@Target({ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public  @interface  BatchControlAnnotation{
    public Class<?> classType();
    public String batchName() default "none";
}

我有这个切入点:

    @Around("@annotation(BatchControlAnnotation)")
public Object  beforeBatch(ProceedingJoinPoint punto, BatchControlAnnotation batchControlAnnotation) throws Throwable {
    log.debug("HEMOS ENTRADO EN EL ASPECTO, HEMOS CONSEGUIDO LOS VALIRES DE LA ANOTACION CLASSTYPE : {} BATCHNAME {}", batchControlAnnotation.classType().getName(), batchControlAnnotation.batchName());
    log.debug("before");
    Object obj = null;
    try {
       obj = punto.proceed();
    } catch (Throwable e) {
       log.error(e.getMessage(), e);
       throw e;
    }
    log.debug("after");
    return obj;
}

但是我收到了这个错误,我不明白为什么:

org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration': bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:所指的错误类型不是 注释类型:******** 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) 在 org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:238) 在 org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:710) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:535) 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) 在 com.karabati.ApibackApp.main(ApibackApp.java:61) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)

有人知道发生了什么吗?或者如何解决?

【问题讨论】:

    标签: java spring-boot aop java-annotations


    【解决方案1】:

    好的,我已经看到问题出在哪里了。

    @Around("@annotation(BatchControlAnnotation)")
    public Object  beforeBatch(ProceedingJoinPoint punto, BatchControlAnnotation batchControlAnnotation) throws Throwable
    

    问题出在这一行:

    @Around("@annotation(***BatchControlAnnotation***)")
    

    标记的文本必须引用函数beforeBatch定义上的变量名,我指的是类型。所以...将BatchControlAnnotation 更改为batchControlAnnotation,现在可以正常工作了。

    不得不使用变量名而不是类型很有趣,但就是这样......

    【讨论】:

      猜你喜欢
      • 2022-12-02
      • 1970-01-01
      • 2012-02-03
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多