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)

  • 相关阅读:
    25-网易新闻iOS版使用的开源组件
    03-Xcode 6 插件失效的临时解决方案
    01-CEO才是天花板
    01-微信6.2
    01-创业视频
    03-http2翻译在线文档
    02-iOS核心动画-第一课——ViewAnimations
    24-Xcode快捷键
    02-IOS项目开发代码规范标准
    03-iOS Socket用法
  • 原文地址:https://www.cnblogs.com/edda/p/13474579.html
Copyright © 2011-2022 走看看