2014-04-04 8 views
1

HI Я использую следующую конфигурацию на основе аннотаций, чтобы подключить мой аспект, который смотрит на пружинные контроллеры для ведения журнала и другие вызовы метода перекрестной резки. Но, похоже, код, который я использую, не получится.Spring AOP с контроллерами SPring MVC не работает

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

} 

но мой аспект не получает вызываются ..следующим аспект класса, как показано ниже

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

}  

Пожалуйста ПОМОГИТЕ КОГО !!!

ответ

1

Измените свои @Pointcut определения. Для типов вместо within(@.... использования @within(...., для методов вместо within(@.... использования @annotation(....

См spring referene относительно срезов в для получения дополнительной информации

+0

Спасибо глупой ошибки меня :) –

Смежные вопросы