2012-04-20 82 views
0

我有一个奇怪的问题。jsp渲染后的AOP切入点

我需要在服务器交互结束时真正执行代码。所以,如果我使用jsp,我需要在页面呈现后执行它。

有一种方法可以执行它吗?

我想这个切入点

@Pointcut("@annotation(org.springframework.web.bin d.annotation.RequestMapping)") 

之后,但它留给我的只是“返回的ModelAndView”之后。我需要获得服务器会话的最终结果。

我想这样做,因为我需要关闭Hibernate会话,避免延迟初始化例外由于会议闭幕后的JSP已经呈现的观点,我想避免的脚本让喜欢

<% HibernateManager.getSession().close() %> 

有效连接视图与模型

回答

2

你可以有一个弹簧MVC拦截器 - 实现HandlerIntercepetorafterCompletion(..)方法。你也可以在过滤器中做到这一点。

但是你没有这两个,有两个原因:

  • 你不应该通过初始化集合到您的视图。初始化您在服务层中需要的所有内容,然后您将不会有LazyInitializationException。事实上,avoid lazy collections
  • 即使你决定要偷懒的集合,而不是初始化它们的服务,Spring允许你OpenEntityManagerInViewInterceptor(和Filter),也OpenSessionInViewInterceptor(和Filter)该做的正是你需要的。
+0

谢谢。然而,我并不喜欢去除“懒惰”,因为在我看来,懒惰代替了关系更有优势。 (当然,我们需要更仔细地编写代码!) – Gtazok 2012-04-23 13:49:08