пользовательские аннотации && ошибка аспектов java.lang.IllegalArgumentException: указанный тип ошибки не является типом аннотации

Я пытаюсь создать и аспект вокруг пользовательской аннотации. У меня есть такая аннотация:

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

И у меня есть этот аспект pointcut:

    @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: указанный тип ошибки не является типом аннотации: ******* at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory) или springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:317) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultWorkSinglengistry.java) .support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:315) по адресу org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.Prolegate: 204) по адресу org.spring.java: : 238) в org.springframework.context.support.AbstractApplicationContext.registerBeanPostPr ocessors (AbstractApplicationContext.java:710) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:535) в org.springframework.boot.web.servlet.context.ServletWebServerContext.Appblication1 в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:759) в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:395) в org.springframework.boot.SpringApplication.run (SpringApplication.run ) в com.karabati.ApibackApp.main (ApibackApp.java:61) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.spri ngframework.boot.devtools.restart.RestartLauncher.run (RestartLauncher.java:49)

Кто-нибудь знает о том, что происходит? Или как решить?


person Jose Miguel    schedule 20.03.2019    source источник


Ответы (1)


Хорошо, я уже видел, в чем проблема.

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

Проблема в этой строке:

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

Выделенный текст должен ссылаться на имя переменной в определении функции beforeBatch, я имел в виду тип. Итак ... меняем BatchControlAnnotation на batchControlAnnotation, теперь все работает нормально.

Забавно использовать имя переменной вместо типа, но это так ....

person Jose Miguel    schedule 20.03.2019