【发布时间】:2023-03-05 13:05:01
【问题描述】:
我有一个类使用静态方法来包装远程 API 调用。
一般来说,我不希望我的 API 服务器一直“监听”这些调用,而是只在程序使用类时监听。所以我需要一种方法来告诉服务器在加载类时“唤醒”(我如何发送“唤醒”消息无关紧要)。
我知道我可以在调用第一个类方法时唤醒服务器,但我希望在将类加载到正在运行的程序中时它准备好(即使它是延迟加载的)。
另外,如果该类不再使用,我会很高兴知道,这样我就可以告诉服务器重新进入睡眠状态。
基本上,我正在寻找整个类的“构造函数”和“终结器”。这个可以吗?
编辑:我忘了提到一件非常重要的事情,我不能让用户使用公共静态方法或类似的方法手动初始化/完成类。该课程需要感觉像一个普通的本地课程。
【问题讨论】:
-
您需要满足“有意义的使用”才能将类“加载”到 JVM 中。那时,静态初始化程序可能就是您想要的。我不知道终结器部分。
-
不确定我理解您所说的“有意义的使用”是什么意思。您的意思是 JVM 仅在第一次使用类时才延迟加载类?我忘了提到我不想在类中添加静态初始化/完成方法,从用户的角度来看,整个事情需要像普通类一样。
-
差不多,是的。查看一些文献:onjava.com/pub/a/onjava/2005/01/26/classloading.html
-
这台服务器是否在某种容器中?你能绑定到 web-app 生命周期或 servlet 上下文生命周期吗?类加载生命周期是......不是一个非常好的定义的东西。
-
恐怕班级寿命是我唯一可以利用的东西。此类旨在用于本地环境并“感觉”像本地类。正因为如此,我选择不添加静态“初始化”方法。
标签: java static jvm classloader