2012-07-25 49 views
7

如果我们在该领域的代码具有另一种产品调用的方法,并获取对象列表。我们需要对代码进行更改,以便在填充要返回的列表时更灵活,我们可以在临时中为客户创建一个拦截器,在返回列表之前截取该方法,并从列表中移除项目调用该方法的产品将获取该列表。在调用类获取它之前,ejb拦截器可以更改方法的返回值吗?

例如

OurCode.search()返回foundObjects

列表

其他产品调用OurCode.search,接收100个项目

我们可以创建一个拦截器,OurCode.search返回前拦截和更改的列表foundObjects,删除不必要的项目?这只是一个临时修复,直到未来的版本

回答

10

虽然我不建议这样做(为了可理解性,和我的经验,“临时修复”将成为一个永久的),你可以做这与拦截器。

@AroundInvoke 
Object filterSearchResults(InvocationContext ctx) throws Exception { 
    Object result = ctx.proceed(); 
    if (result != null) { 
     List<SearchResult> results = (List<SearchResult>)result; 
     // do whatever you want to to with your results here 
     return results; 
    } 
    return result; 
} 
相关问题