繁体   English   中英

自定义注释&&方面错误java.lang.IllegalArgumentException:error引用的类型不是注释类型

[英]custom annotations && aspects error java.lang.IllegalArgumentException: error Type referred to is not an annotation type

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

@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:error引用的类型不是注释类型:位于org的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)。在org.springframework.beans.factory的org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)的springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:317) .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.conte上的org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:710) 位于org.springframework.boot.SpringApplication.refresh(SpringApplication。 java:759)org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)atg.springframework.boot.SpringApplication.run(SpringApplication.java:327)at com.karabati.ApibackApp.main(ApibackApp.java) :61)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang。在org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)中反映.Method.invoke(Method.java:498)

请问有什么想法发生了什么吗? 或者如何解决?

好的,我已经看到了问题所在。

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

问题出在这一行:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM