zoukankan      html  css  js  c++  java
  • 在应用程序中的所有其他bean被销毁之前执行一步工作

    1、实现ServletContextListener、ApplicationContextAware两个接口,在销毁方法里借助ApplicationContextAware注入的application对象使用
    2、实现ApplicationListener,自己添加需要用到的依赖对象(参考https://www.dazhuanlan.com/2019/11/28/5ddf9ac1a4c77/)

    public class MyListener implements ApplicationListener {
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            if(event instanceof ContextClosedEvent) {
                stopScheduler();
            }
        }
    }

    3、实现Lifecycle接口

    4、第2、3都需要调用classPathXmlApplication.close()才会执行这些方法,因为是纯java的应用我不需要显式的去关闭容器,后面看到一种钩子的方法

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
               
               public void run() {
                   stopScheduler();
               }
           }));

     我通过实现beanPostProcessor接口的时候随意before还是after加入这个方法(判断是否是我注册的这个beanName,不然会注册n个钩子。。。。),这样在进程结束的时候就会执行这个线程方法里匿名调用自定义的方法,而且还能继续拿到bean(因为根本没有销毁beans)

  • 相关阅读:
    Python中re(正则表达式)模块学习
    Django(第一次使用心得,及总结)
    Lunix 安装VMware tools
    主键自动生成办法
    常用的android弹出对话框
    JDBC_mysql---防sql注入,存储图片
    java实现md5加密
    sql语句批量处理Batch
    连接mysql数据库2+操作入门
    Oracle事物基础
  • 原文地址:https://www.cnblogs.com/edda/p/13474579.html
Copyright © 2011-2022 走看看