2014-04-04 2 views
1

안녕하세요 저는 다음과 같은 주석 기반 구성을 사용하여 스프링 컨트롤러에서 로깅 및 다른 교차 절단 메서드 호출을 보는 모습을 나타냅니다.하지만 사용중인 코드는 다음과 같습니다. 호출되지 않습니다. 누군가 도와주세요 SPring MVC 컨트롤러가있는 스프링 AOP가 작동하지 않습니다.

@Aspect 
public class RestControllerAspect { 

    @Pointcut("within(@org.springframework.stereotype.Controller *)") 
    public void controller() { 
    } 

    @Pointcut("execution(* *(..))") 
    public void methodPointcut() { 
     System.out.println("Invoked: "); 
    } 

    @Pointcut("within(@org.springframework.web.bind.annotation.RequestMapping *)") 
    public void requestMapping() { 
     System.out.println("Invoked: "); 
    } 

    @Before("controller() && methodPointcut() && requestMapping()") 
    public void aroundControllerMethod(JoinPoint joinPoint) throws Throwable { 
     System.out.println("Invoked: " + niceName(joinPoint)); 
    } 

    @AfterReturning("controller() && methodPointcut() && requestMapping()") 
    public void afterControllerMethod(JoinPoint joinPoint) { 
     System.out.println("Finished: " + niceName(joinPoint)); 
    } 

    private String niceName(JoinPoint joinPoint) { 
     return joinPoint.getTarget().getClass() + "#" + joinPoint.getSignature().getName() + "\n\targs:" 
       + Arrays.toString(joinPoint.getArgs()); 
    } 

}  

다음과 같이

@Configuration 
@EnableWebMvc 
@EnableAspectJAutoProxy 
@ComponentScan({"com.pumpkinsafari.api"}) 
public class WebConfig extends WebMvcConfigurerAdapter { 

    /** The Constant DD_MM_YYYY. */ 
    private static final String DD_MM_YYYY = "yyyy-MM-dd"; 

    /** The Constant DATE_FORMAT. */ 
    private static final DateFormat DATE_FORMAT = new SimpleDateFormat(DD_MM_YYYY); 

    /** 
    * Instantiates a new web config. 
    */ 
    public WebConfig() { 
     super(); 
    } 

    @Bean 
    public RestControllerAspect controllerAspect(){ 
     return new RestControllerAspect(); 
    } 

    // beans 

    /** 
    * Xstream marshaller. 
    * 
    * @return the x stream marshaller 
    */ 
    public XStreamMarshaller xstreamMarshaller() { 
     final XStreamMarshaller xStreamMarshaller = new XStreamMarshaller(); 
     xStreamMarshaller.setAutodetectAnnotations(true); 
     xStreamMarshaller.setAnnotatedClasses(new Class[] { Principal.class, Customer.class, Role.class, 
       Privilege.class, SocialUser.class, SearchRequest.class }); 
     xStreamMarshaller.getXStream().addDefaultImplementation(java.sql.Timestamp.class, java.util.Date.class); 

     return xStreamMarshaller; 
    } 

    /** 
    * Marshalling http message converter. 
    * 
    * @return the marshalling http message converter 
    */ 
    public MarshallingHttpMessageConverter marshallingHttpMessageConverter() { 
     final MarshallingHttpMessageConverter marshallingHttpMessageConverter = new MarshallingHttpMessageConverter(); 
     final XStreamMarshaller xstreamMarshaller = xstreamMarshaller(); 
     marshallingHttpMessageConverter.setMarshaller(xstreamMarshaller); 
     marshallingHttpMessageConverter.setUnmarshaller(xstreamMarshaller); 

     return marshallingHttpMessageConverter; 
    } 

    // template 

    /* 
    * (non-Javadoc) 
    * 
    * @see 
    * org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter 
    * #configureMessageConverters(java.util.List) 
    */ 
    @Override 
    public void configureMessageConverters(final List<HttpMessageConverter<?>> messageConverters) { 
     messageConverters.add(marshallingHttpMessageConverter()); 

     final ClassLoader classLoader = getClass().getClassLoader(); 
     if (ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader)) { 
      MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); 
      jackson2HttpMessageConverter.getObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
      // Register date format for marshalling unmarshalling dates 
      jackson2HttpMessageConverter.getObjectMapper().setDateFormat(DATE_FORMAT); 
      messageConverters.add(jackson2HttpMessageConverter); 
     } else if (ClassUtils.isPresent("org.codehaus.jackson.map.ObjectMapper", classLoader)) { 
      MappingJacksonHttpMessageConverter jacksonHttpMessageConverter = new MappingJacksonHttpMessageConverter(); 
      jacksonHttpMessageConverter.getObjectMapper().disable(
        DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES); 
      // Register date format for marshalling unmarshalling dates 
      jacksonHttpMessageConverter.getObjectMapper().setDateFormat(DATE_FORMAT); 
      messageConverters.add(jacksonHttpMessageConverter); 
     } 

     super.configureMessageConverters(messageConverters); 
    } 

} 

하지만 내 측면이 용맹 한 측면 클래스 불려 오지 못한입니다!

답변

1

@Pointcut 정의를 변경하십시오. 유형 대신 within(@.... 사용 @within(...., 방법에 대한 대신 within(@.... 사용 @annotation(....

내게로

+0

감사 어리석은 실수 대한 추가 정보를 원하시면 spring referene에 대한 포인트 컷을 참조하십시오 : –

관련 문제