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

时间:2011-11-10 12:15:11

标签: java eclipse

在eclipse插件中我有两个插件,用于自己的类加载器来加载类.. 2主要问题
案例1: - 在第一个插件中我创建了一个单例类,当我想要它从另一个插件设置一些属性时(因为单例因此每个对象都会改变相同的对象)但它不能做同样的事情因为我接受..因为每个类加载器都有自己的单例对象.... 案例2: - 在第一个或第二个插件中我创建了一个具有单个static属性的类,并通过另一个插件我想要访问该属性...
我想访问该属性,但我不能,因为每个类加载器都有自己的名称空间,这意味着有自己的静态变量...
我做的是: -
1.我在第一个插件中创建一个带有static String变量的类 2.通过2ND插件我设置该属性的值
3.当我通过1st使用它时它的值null以及如果通过2nd它显示我之前设置的那个。 现在的问题是我如何访问这些属性......在案例1和案例2中

1 个答案:

答案 0 :(得分:5)

在Eclipse中,每个OSGi包(插件)都有自己的类加载器。与其他捆绑包相比,它们没有层次结构。

但是如果你在plugin1中定义一个静态变量并希望从plugin2访问它,你可以通过编辑plugin2 MANIFEST.MF 来获得plugin2 Import-PackageRequire-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-PackageRequire-Bundle是查看另一个包中一个包的类的正确方法,只要这些包也使用Export-Package