曙光1234 2019-04-23 17:01 采纳率: 0%
浏览 421

Java静态代码块中写这个监听方法时的运行原理是什么?

最近再学习过程中遇到了一个问题,看的视频中老师再静态代码块中写了关于hibernate中的SessionFactory关闭的方法,感觉不是很理解,静态代码块中的东西不是在类加载的时候都运行完了嘛。代码如下:

package com.gyf.hibernate.uitls;

import org.dom4j.rule.Rule;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

    private static SessionFactory factory;
    static{
        //1.获取核心 配置文件对象
        Configuration cfg = new Configuration().configure();

        //2.创建会话工厂
        factory = cfg.buildSessionFactory();

        //监听程序关闭
        Runtime.getRuntime().addShutdownHook(new Thread(){
            @Override
            public void run() {
                System.out.println("程序关闭...");
                //关闭会话工厂
                factory.close();
            }
        });

    }

    public static Session openSession(){
        return factory.openSession();
    }

    public static Session getCurrentSession(){
        return factory.getCurrentSession();
    }

}

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-04-23 17:16
    关注

    注意, factory.close();这个不是在静态代码块中调用的,而是在静态代码块中以匿名实现接口的方式定义的。
    作为参数传给了addShutdownHook
    因此当关闭的时候才会被触发调用。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?