iPojo 实例创建和管理

iPojo instance creation and management

由于我们忘记处理的构造实例,我目前在 iPojo 泄漏方面遇到了很多麻烦。我认为这是使用 ipojo Factory 技术使用命令式实例化的一个不可避免的缺点:基本上你通过调用 factory.createComponentInstance(config) 来说明你何时需要你的服务,所以你有责任在你完成它时说出来。这迫使我保留两个引用,一个用于我想要使用的服务,另一个用于 iPojo ComponentInstance,这样当使用完成时,它可以调用 componentInstance.dispose()。如果不是,则存在泄漏

在消费者不需要处理 iPojo 服务及其实例的生命周期的情况下,是否有更明确的方式来执行此操作?

为了简化我的用例,假设有一个 UI 里面有一个按钮,每次按下按钮时,我都需要一个新的、唯一的 iPojo 服务实例。理想情况下,实例在超出范围时将被 GC,而消费者无需执行任何操作

也许我的错误是将服务用作实例,但我有三个理由使用服务而不是正常的 class 并调用 new

  1. 服务实现应该是可替代的
  2. 消费者应该依赖于一个接口,而不是一个 implementation/provider,这不仅是因为 #1,还因为依赖具体实现时会拉取更多的传递依赖性
  3. 服务实现本身有一些依赖项,我希望 iPojo 能够注入这些依赖项(依赖项注入)。

作为第二个请求,有谁知道任何使用 iPojo 的开源、真实(即不是虚拟、演示)项目,我可以将其用作 iPojo 的良好用法示例?

您可能应该使用自定义 'creation strategy' 而不是创建组件实例。因此,您将只有一个组件实例,但管理着多个 'implementation' 实例(服务对象)。您决定何时创建和处置这些对象。有关 http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html#service-serving-object-creation.

的更多信息

关于使用iPOJO的项目,你可以看看依赖iPOJO的Wisdom Framework:http://wisdom-framework.org(那里有代码:github.com/wisdom-framework/wisdom/)