【问题标题】:AOP Pointcut after jsp renderingjsp渲染后的AOP切入点
【发布时间】:2012-04-21 03:46:16
【问题描述】:

我有一个奇怪的问题。

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

有办法执行吗?

我在这个切入点之后尝试过

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

但它在“返回 ModelAndView”之后离开了我。我需要结束服务器会话。

我想这样做是因为 我需要关闭 Hibernate 会话,避免由于在 jsp 呈现视图之后关闭会话而导致的延迟初始化异常,并且我想避免脚本让喜欢

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

有效地将视图与模型耦合

【问题讨论】:

    标签: java spring hibernate jsp aop


    【解决方案1】:

    你可以有一个 spring-mvc 拦截器 - 实现 HandlerIntercepetorafterCompletion(..) 方法。您也可以在过滤器中执行此操作。

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

    • 您不应将未初始化的集合传递给您的视图。在服务层初始化你需要的一切,然后你就不会有 LazyInitializationException。其实avoid lazy collections
    • 即使您决定使用惰性集合,而不是在服务中初始化它们,spring 也会为您提供OpenEntityManagerInViewInterceptor(和Filter),以及OpenSessionInViewInterceptor(和Filter),它们完全可以满足您的需求需要。

    【讨论】:

    • 谢谢。但是,我不喜欢删除“懒惰”,因为在我看来,懒惰而不是渴望关系有更多优势。 (当然我们需要更仔细地编写代码!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多