2017-09-14 6 views
0

스프링 부트와 aspectj를 사용하여 라이브러리를 만들었습니다.스프링 부트와 aspectj를 사용하여 라이브러리 만들기

나는 오류가 클래스를 가져온 후 발생했습니다 측면

@Aspect 
@Component 
public class LoggerAspect { 

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

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

    } 

} 

에 대한 주석

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

과 클래스의 구성 클래스

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

클래스를 만들었습니다

구성 "@Import (LoggerConfig.class)"을 내 응용 프로그램에 넣고 실행하려고하면 fo 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 

답변

0

당신은 handleController의 방법 서명 및 @annotation 내부에 설치 매개 변수를 수정해야합니다. 아래에 표시된 예는 작동해야합니다.

@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(); 

    } 

}