iPojo 实例创建和管理
iPojo instance creation and management
由于我们忘记处理的构造实例,我目前在 iPojo 泄漏方面遇到了很多麻烦。我认为这是使用 ipojo Factory 技术使用命令式实例化的一个不可避免的缺点:基本上你通过调用 factory.createComponentInstance(config)
来说明你何时需要你的服务,所以你有责任在你完成它时说出来。这迫使我保留两个引用,一个用于我想要使用的服务,另一个用于 iPojo ComponentInstance
,这样当使用完成时,它可以调用 componentInstance.dispose()
。如果不是,则存在泄漏
在消费者不需要处理 iPojo 服务及其实例的生命周期的情况下,是否有更明确的方式来执行此操作?
为了简化我的用例,假设有一个 UI 里面有一个按钮,每次按下按钮时,我都需要一个新的、唯一的 iPojo 服务实例。理想情况下,实例在超出范围时将被 GC,而消费者无需执行任何操作
也许我的错误是将服务用作实例,但我有三个理由使用服务而不是正常的 class 并调用 new
。
- 服务实现应该是可替代的
- 消费者应该依赖于一个接口,而不是一个 implementation/provider,这不仅是因为 #1,还因为依赖具体实现时会拉取更多的传递依赖性
- 服务实现本身有一些依赖项,我希望 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/)
由于我们忘记处理的构造实例,我目前在 iPojo 泄漏方面遇到了很多麻烦。我认为这是使用 ipojo Factory 技术使用命令式实例化的一个不可避免的缺点:基本上你通过调用 factory.createComponentInstance(config)
来说明你何时需要你的服务,所以你有责任在你完成它时说出来。这迫使我保留两个引用,一个用于我想要使用的服务,另一个用于 iPojo ComponentInstance
,这样当使用完成时,它可以调用 componentInstance.dispose()
。如果不是,则存在泄漏
在消费者不需要处理 iPojo 服务及其实例的生命周期的情况下,是否有更明确的方式来执行此操作?
为了简化我的用例,假设有一个 UI 里面有一个按钮,每次按下按钮时,我都需要一个新的、唯一的 iPojo 服务实例。理想情况下,实例在超出范围时将被 GC,而消费者无需执行任何操作
也许我的错误是将服务用作实例,但我有三个理由使用服务而不是正常的 class 并调用 new
。
- 服务实现应该是可替代的
- 消费者应该依赖于一个接口,而不是一个 implementation/provider,这不仅是因为 #1,还因为依赖具体实现时会拉取更多的传递依赖性
- 服务实现本身有一些依赖项,我希望 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/)