不用spring框架的情况下,如何启动就运行某个类里的方法?

比如有个方法的作用是从数据库中缓存数据字典,希望做成一个程序启动时就从执行的方法,网上找了资料,全是用springboot时的方法,但现在有个很老的程序,不是spring类的框架

现在做到的程度是方法弄成静态,然后用:
static {
(方法名);
}
这样处理,缺陷是必须有人去调用一次这个类,缓存才会开始执行,这样可能会导致第一个客户访问系统时出现问题,肯定不能让第一个客户去造福后面的客户,所以如何在没有现代框架的情况下,启动运行呢?

对了,这个启动缓存不能写在main里,因为我这处理的是一个第三方依赖包,整个程序的main类不在我这

main 方法调用是必须的,不管是直接的调用还是间接的调用,没办法省略掉,类不加载到 JVM 中肯定没办法执行啊

不管你是不是用spring,你肯定是使用容器运行程序的,比如tomcat的ServletContextListener了解一下,你可以自定义一个监听器,在容器启动的时候执行某些行为,实现方法就自行百度吧。

不用spring 可以在运行容器上写一个监听,当容器启动后 触发监听执行初始化脚本

既然main的决定权不在你手中,main会依赖你的第三方库,main最终启动的时候你的类是会被加载到内存中的,所以,你要在你的想被调的类里的构造函数里加入你要调用的方法即可


public class Instance {

    public static void main(String[] args) {
        System.out.println("我最帅2");
    }
}

class Target extends Instance{
    static {
        System.out.println("我最帅1");
    }

}

img

利用继承解决。运行Target 类

HttpServlet,可以继承这个,写一个init初始化加载data的方法,另外需要配置它的启动顺序

跟领导建议系统重构,换成spring 就好了

如果是web项目的话可以继承ServletContextListener,一启动就会执行相应逻辑

1.实现ApplicationListener< ContextRefreshedEvent>接口
2.SpringBoot的ApplicationRunner