2016-08-18 5 views
3

У меня есть небольшая проблема. Я вызываю функцию AfterReturning после возвращения некоторой функции, и моя функция AfterReturning работает дважды, и я не хочу этого. Вот код:AOP AfterReturning функция возвращается дважды

@Aspect 
@Component 
@Configuration 
public class AspectOP { 

    LogController logcontroller = new LogController(); 

    @AfterReturning("execution(* com..*save*(..))") 
    public void doSomething() { 
     logcontroller.guestbook("XD"); 
    } 
} 

У меня есть функция сохранения и мы сменили имена, но это же самое снова. Я попытался удалить @Component или @Aspect, тогда он не работает.

EDIT

Моя функция сохранения

@Controller 
@RequestMapping("/api") 
public class EntryController { 

    @Autowired 
    EntryRepository repo; 
    Account account; 

    @RequestMapping(path = "/getir", method = RequestMethod.GET) 
    public @ResponseBody List<Entries> getir(){ 
     return repo.findAll(); 

    } 

    @RequestMapping(path = "/saveentry", method = RequestMethod.POST, consumes = "application/json") 
    public @ResponseBody Entries save(@RequestBody Entries entry) { 
     return repo.save(entry); 
    } 
} 

LogController.class

@Controller 
public class LogController { 

    @MessageMapping("/guestbook") 
    @SendTo("/topic/entries") 
    public Log guestbook(String message) { 
     System.out.println("Received message: " + message); 
     return new Log(message); 
    } 
} 

Моя главная цель состоит в том, когда что-то сохраняется, я посылаю что-то к моему гнезду. Он работает, но функции doSomething работают дважды.

+0

может также показать класс, который вы ожидаете совет обратиться к – kuhajeyan

+0

я добавил классы. –

ответ

0

кажется совет, применимый к вашему классу EntryRepository. изменить свое выражение с пересечениями на что-то подобное, чтобы быть только к EntryController Сохраним методу

@AfterReturning("execution(* com.xyz.EntryController.save*(..))") 

Примеры here

+0

, но я хочу, чтобы эта функция выполнялась в любом классе, имя которой имеет имя «save». –

+0

@ Gürsel, следовательно, это происходит, как и ожидалось (с помощью pointcut), совет будет применяться дважды, когда вы вызываете EntryController.save, 1. EntryController.save (..) 2. EntryRepository.save (..) - поскольку он вызывается внутри EntryController.save – kuhajeyan

+0

EnrtyRepository - emty. Он не имеет никакой функции. –