2016-08-18 58 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"); 
    } 
} 

我有2個保存功能,我們改了名字,但它又是一樣的。我嘗試刪除@Component或@Aspect,然後它不起作用。

編輯

我保存功能

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

我的主要目標是當事情被保存,我送點東西給我的插座。它正在工作,但是某些功能正在工作兩次。

+0

也可以顯示您所期望的忠告適用於 – kuhajeyan

+0

我添加類的類。 –

回答

0

似乎建議也適用於您的EntryRepository類。改變你的切入點表達類似,將僅適用於EntryController的保存方法

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

例子here

+0

但我希望這個函數可以在函數的名字中有「保存」字的任何類中運行。 –

+0

@Gürsel因此,正如預期的那樣發生(使用您的切入點),當您調用EntryController.save時,建議將會應用兩次, 1. EntryController.save(..) 2. EntryRepository.save(..) - 因爲它是在EntryController.save中調用的 – kuhajeyan

+0

EnrtyRepository是emty。它沒有任何功能。 –