OSGi:当更新源(类)包时,现有实例会发生什么?

时间:2015-09-03 22:57:25

标签: java osgi classloader osgi-bundle

一般问题:当更新源(类)包(并刷新框架)时,现有实例会发生什么?

例如,假设我有一个类的实例(A类,实例-a),然后我在其包中更改了A类的源(Bundle A),然后我更新了bundle-A并刷新框架。在更新之前创建的实例-a,以某种方式“神奇地”'有新的A类的更新功能?

同样,如果我有B类实例-b(来自B组),而B类扩展A类(来自Bundle A),那么我更改/更新/刷新包A,如上所述,是否已经创建了实例-b拥有新A类的功能?

似乎这两个问题的答案都是否定的。作为一般规则,似乎对于现存实例,它们必须是RE-INSTANTIATED(丢弃并创建新实例)以获得新功能。这是真的吗?

THX。

1 个答案:

答案 0 :(得分:0)

没有魔力。如果您从一个包中保存一个类型的实例并且该包已更新,那么您保存的实例将保持不变。

这就是您应该使用服务来使用另一个包的实例的原因。捆绑注册服务,您获得服务。如果捆绑包已停止,则其服务将取消注册,您可以收到通知。使用声明式服务及其注释使这一切变得非常简单。