Java 如何在不同的类加载器中使用Singleton对象。。。。?

Java 如何在不同的类加载器中使用Singleton对象。。。。?,java,eclipse,Java,Eclipse,在eclipse插件中,我有两个插件,它们使用自己的类加载器来加载类2个主要问题 案例1:-在第一个插件中,我创建了一个singleton类,当我希望它从另一个插件中设置一些属性时(因为singleton所以每个对象都会更改相同的对象),但它不能像我接受的那样做。。因为每个类加载器都有自己的单例对象…… 案例2:-在第一个或第二个插件中,我用一个静态属性创建了一个类,并通过另一个插件访问该属性… 我想访问该属性,但我不能,因为每个类加载器都有自己的名称空间,这意味着有自己的静态变量… 我所做的是

在eclipse插件中,我有两个插件,它们使用自己的类加载器来加载类2个主要问题

案例1:-在第一个插件中,我创建了一个singleton类,当我希望它从另一个插件中设置一些属性时(因为singleton所以每个对象都会更改相同的对象),但它不能像我接受的那样做。。因为每个类加载器都有自己的单例对象……
案例2:-在第一个或第二个插件中,我用一个
静态属性创建了一个类,并通过另一个插件访问该属性…
我想访问该属性,但我不能,因为每个类加载器都有自己的名称空间,这意味着有自己的静态变量…
我所做的是:-
1.我在第一个插件中用一个
静态字符串
变量创建了一个类
2.通过第二个插件,我设置了该属性的值
3.当我通过第一次使用它时,它的值如何
null
,如果通过第二次使用它,则显示我之前设置的值。
现在的问题是如何访问这些属性……在Eclipse中的案例1和案例2中,每个OSGi包(插件)都有自己的类加载器。与其他捆绑包相比,它们没有层次结构

但如果您在plugin1中定义了一个静态变量,并希望从plugin2访问它,那么您可以通过编辑plugin2MANIFEST.MF使用plugin2
导入包
Require Bundle
。例如:如果这是plugin2的MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.examples.propertysheet; singleton:=true
Bundle-Version: 3.2.200.qualifier
Bundle-Activator: org.eclipse.ui.examples.propertysheet.PropertySheetPlugin
Bundle-Vendor: %Plugin.providerName
Bundle-Localization: plugin
Require-Bundle: plugin1
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.ui.examples.propertysheet
Bundle-RequiredExecutionEnvironment: J2SE-1.4

Import-Package
Require-Bundle
是在另一个Bundle中查看来自一个Bundle的类的正确方法,只要Bundle也使用
Export-Package

“因为对于每个类加载器,都有自己的单例对象…”你是说在不同的类加载器上多次加载相同的插件吗?因为如果所有这些类加载器共享同一个“父”类加载器来访问你的插件,那么它仍然应该是一个单例类。我没有多次加载同一个类,我只是想在不同的插件中使用我的类属性,但现在它不是。如果你这样做,所讨论的类(及其单例字段)将仅存在于一个位置并共享。请使用2 MANIFEST.MFs更新您的问题。这是可行的,您必须稍微配置错误。