永发信息网

java框架spring中的opensessioninview有什么作用

答案:4  悬赏:0  手机版
解决时间 2021-02-08 18:51
  • 提问者网友:轻浮
  • 2021-02-07 18:16
java框架spring中的opensessioninview有什么作用
最佳答案
  • 五星知识达人网友:舍身薄凉客
  • 2021-02-07 18:24
在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们 希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓的Open Session In view 。 我们可以filter来达到此目的, 也可以用interceptor来做。
filter:
?
<!-- Spring的OpenSessionInView实现 此监听器应该在struts2的监听器前面-->
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

interceptor:
?
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;

publicclassXxxDAOextendsHibernateDaoSupport {

publicvoidsave(Xxx transientInstance) {
try{
getHibernateTemplate().save(transientInstance);
}catch(RuntimeException re) {
throwre;
}
}
}

OpenSessionInViewFilter的主要功能是用来把一个Hibernate Session和一次完整的请求过程对应的线程相绑定。Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。

另外,<url-pattern>/*</url-pattern>中最好不要写/*, 因为这样的话,访问所有的url都会为其开一个session,造成性能的下降;
全部回答
  • 1楼网友:鱼芗
  • 2021-02-07 21:21
这么说,spring与struts一样,是一个开源框架,它的主要好处就是实现了ioc依赖反转。 -- ioc是什么呢?ioc就是根据配置文件,将javabean实例化,在struts中,bean的实例是需要自己申请的,而spring可以更好的实现bean与bean之间的解藕,而且可以更好地实现需求变化的插拔(通过修改配置文件内容而不是修改代码) -- spring还有一个好处就是aop -- aop就是可以在不知道源码的情况下,甚至只有class文件的时候,也可以对当前文件插入操作,比如,一段程序需要加入校验代码,但是校验又不属于业务代码的一部分,这时候就可以通过aop来插入校验代码而不影响业务逻辑。 spring还有很多好处,建议找本spring方面的书好好看看。 希望对楼主有帮助~
  • 2楼网友:神鬼未生
  • 2021-02-07 19:55
在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓的Open Session In view 。
  • 3楼网友:旧脸谱
  • 2021-02-07 19:23
这个过滤器是用来解决hibernate的延迟加载问题,是spring+hibernate框架结合开发时用到的!把session延迟到页面上关闭。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯