Java 什么';静态场的范围是多少?

Java 什么';静态场的范围是多少?,java,apache-servicemix,Java,Apache Servicemix,我在静电场遇到了一个问题。我认为根本原因一定是静态场的范围 该项目基于ApacheServiceMix,由许多子项目组成 在子项目“A”中,我在类“Registration”中定义了一个静态列表字段“reg”,并定义了一些静态方法来操作该字段,如“add”和“getAll”。部署子项目A后,项目“A”的名称将添加到静态列表中进行注册 问题是当涉及子项目“B”时,当部署子项目“B”时,我希望它的名称将添加到完全相同的静态列表中进行注册。但当我调用静态方法getAll或add-on“Registra

我在静电场遇到了一个问题。我认为根本原因一定是静态场的范围

该项目基于ApacheServiceMix,由许多子项目组成

在子项目“A”中,我在类“Registration”中定义了一个静态列表字段“reg”,并定义了一些静态方法来操作该字段,如“add”和“getAll”。部署子项目A后,项目“A”的名称将添加到静态列表中进行注册

问题是当涉及子项目“B”时,当部署子项目“B”时,我希望它的名称将添加到完全相同的静态列表中进行注册。但当我调用静态方法getAll或add-on“Registration”时,子项目B中的“reg”似乎与子项目A中的“reg”完全不同。所以注册功能不起作用

我想问一个基本问题,静态场的范围是什么?它在JVM或其他东西中有效吗


感谢您的帮助

静态的作用域是全局的-在其拥有的类加载器中。JVM可以创建多个类加载器,并在每个新类加载器中加载单独的类实例

静态不是每个JVM的全局,而是每个类加载器的全局。如果静态字段的类加载在不同的类加载器中,则其静态成员在不同的类加载器中将不可见

项目A和项目B是如何部署的?它们在同一类加载器中吗

我不熟悉servicemix,但我认为它在不同的类加载器中部署不同的应用程序,就像Java EE应用程序将在不同的类加载器中部署同一应用程序的不同版本一样,因此您可以并行运行应用程序1.0和应用程序1.1,并且它们不会相互影响

这是故意的

如果是这种情况,您需要一些独立的东西来维护共享状态。(如数据库)