пользовательские аннотации && аспекты ошибка java.lang.IllegalArgumentException: указанный тип ошибки не является типом аннотации - PullRequest
0 голосов
/ 20 марта 2019

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

@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 ': Не удалось инициализировать бин; вложенное исключение 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) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at 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)

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

1 Ответ

0 голосов
/ 20 марта 2019

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

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

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

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

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

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

...