AOP AfterReturning函数返回两次

时间:2016-08-18 09:14:32

标签: java spring aop spring-aop

我有点问题。我在某些函数返回后调用了AfterReturning函数,而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);
    }
}

我的主要目标是在保存某些东西时,我将一些东西发送到我的插座。它正在工作,但doSomething功能正在运行两次。

1 个答案:

答案 0 :(得分:0)

似乎也将建议应用于您的EntryRepository类。将切入点表达式更改为仅适用于EntryController的保存方法

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

示例here