设想
在 2 种方法上的相同 EJB 中的 2x 相同拦截器:
...
@Interceptors(PerformanceAuditor.class)
public Date refreshIfNecessary() {
// there is also the PerformanceAuditor-Interceptor on this method
Pair<Date,String> lastImportDate = importDbDAO.findLatestImportLog();
someContainer.reloadIfNecessary(lastImportDate);
return lastImportDate.getLeft();
}
@Interceptors(PerformanceAuditor.class)
public boolean checkAndRefreshIfNecessary(final Date importDate) {
Date lastImportDate = refreshIfNecessary();
return lastImportDate.after(importDate);
}
...
现在我们在外部调用这个 EJB 的方法,结果如下:
- 调用refreshIfNecessary() -> PerformanceAuditor 被调用2 次
- 调用checkAndRefreshIfNecessary() -> PerformanceAuditor 也被调用了2 次!(但预计 3 次,因为多了一层嵌套!)
那么这里发生了什么?