2017-09-14 5 views
0

J'ai créé une bibliothèque en utilisant spring boot et aspectj.Création d'une bibliothèque en utilisant Spring boot et aspectj

J'ai créé une classe de configuration

@Configuration 
@EnableAspectJAutoProxy 
@ComponentScan(basePackages="com.x.y") 
public class LoggerConfig { 
} 

Une classe pour l'annotation

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface EnableHttpLogging { 
} 

et une classe pour l'aspect

@Aspect 
@Component 
public class LoggerAspect { 

@Around("execution(* *(..)) && @annotation(EnableHttpLogging)") 
    public Object handleController(final ProceedingJoinPoint proceedingJoinPoint) 
      throws Throwable { 

     LOG.info("controller....before "); 
     return proceedingJoinPoint.proceed(); 

    } 

} 

Une erreur est survenue après l'importation d'une classe configuration "@Import (LoggerConfig.class)" dans mon application et en essayant de l'exécuter, j'ai le fo Erreur llowing:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedServletContainerCustomizerBeanPostProcessor': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error Type referred to is not an annotation type: EnableHttpLogging 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:240) 
    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:697) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:526) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
    at com.olps.reassurance.cgoa.endpoint.manager.Application.main(Application.java:43) 
Caused by: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: EnableHttpLogging 
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:193) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:170) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:220) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:279) 
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:311) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:118) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:88) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:69) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:347) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    ... 14 more 

Répondre

0

Vous devez modifier la signature de la méthode de handleController et le paramètre fourni à l'intérieur @annotation. L'exemple ci-dessous devrait fonctionner.

@Aspect 
@Component 
@Slf4j 
public class LoggerAspect { 

    @Around("execution(* *(..)) && @annotation(annotation)") 
    public Object handleController(
      final ProceedingJoinPoint proceedingJoinPoint, 
      EnableHttpLogging annotation) 
      throws Throwable { 

     LOG.info("controller....before "); 
     return proceedingJoinPoint.proceed(); 

    } 

}