关于SqlSessionFactory对象的生命周期问题

关于SqlSessionFactory对象的生命周期问题

项目中在监听器创建了SqlSessionFactory对象后,这个对象为什么一直存在,是因为监听器在web应用程序运行过程中一直在内存中运行吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好。并不是因为监听器。而是因为工具类呢。在工具类中。我们定义了一个静态的sqlSessionFactory变量,并且在initSqlSessionFactry方法中给它了初始值。

http://img1.sycdn.imooc.com//climg/5dd89b190960fe9e09890531.jpg

在监听器中,我们只是借用了监听时机触发了contextInitialized来调用initSqlSessionFactry方法而已。

http://img1.sycdn.imooc.com//climg/5dd89d220919d03908970228.jpg

真正持有sqlSessionFactory的还是SqlSessionFactoryUtils这个工具类。而它能一直存在,也是因为它是工具类的静态成员变量,所以常驻在内存。而每次使用sqlSessionFactory只要调用getSqlSessionFactory方法获取即可。


如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 慕沐8221787 提问者 #1
    工具类为什么能常驻内存呢?
    2019-11-23 15:33:10
  • 芝芝兰兰 回复 提问者 慕沐8221787 #2
    同学你好。1、首先,JVM默认进行内存回收的都是对象,不是类。并不是工具类常驻内存,而是类的静态成员是常驻内存的。2、工具类其实从头到尾都没有经历new去实例化,一直不是一个对象。所以不存在回收问题。只是我们能够通过类名.属性名访问到这个工具类中的静态成员而已。同理,由于getSqlSessionFactory是一个静态方法。所以在什么地方都随时可以通过类名.静态方法名调用它。有关static关键字,同学可以回忆一下零基础阶段 的 Java封装的 2-1和2-2节。祝学习愉快~
    2019-11-23 17:03:31
  • 慕沐8221787 提问者 #3
    零基础阶段 的 Java封装的 2-1和2-2节,主要讲到类的静态成员访问的事情,也就是类和类的对象都可以访问,问题是类的静态成员到底什么时间被销毁,这个请老师详细解释一下。本例中也就是在监听器中创建了一个SqlSessionFactory对象,我的理解就是对工具类的这个静态成员做了初始化,然后在UsersDAO中利用get方法获取这个SqlSessionFactory对象,进而获取到SqlSession,我关心的是这个SqlSessionFactory静态成员到底何时被销毁?
    2019-11-23 18:43:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师