由于我们忘记处理的构造实例,我目前在iPojo泄漏方面遇到了很多麻烦。我认为这是使用ipojo Factory技术进行命令式实例化的一个不可避免的缺点:基本上你通过调用factory.createComponentInstance(config)
来说当你需要服务的时候,所以你有责任说你什么时候完成它。这迫使我保留两个引用,一个用于我想要使用的服务,另一个用于iPojo ComponentInstance
,这样当消费者完成时,它可以调用componentInstance.dispose()
。如果没有,那就是泄漏
在消费者不需要处理iPojo服务及其实例的生命周期的情况下,是否有更具声明性的方法?
为了简化我的用例,假设有一个带有按钮的UI,每次按下按钮,我都需要一个新的,独特的iPojo服务实例。理想情况下,当实例超出范围时,实例将是GC,而消费者不必做任何事情
也许我的错误是使用服务作为实例,但我有三个理由使用服务而不是普通类并调用new
。
作为第二个请求,是否有人知道使用iPojo的任何开源,真实(即非虚拟,演示)项目,我可以将其用作iPojo的良好用法示例?
答案 0 :(得分:1)
您可能应该使用自定义的“创建策略”,而不是创建组件实例。因此,您将只有一个组件实例,但管理了几个“实现”实例(服务对象)。您可以决定何时创建和处置这些对象。有关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 /)