由于我们忘记处理构造的实例,我目前在iPojo泄漏方面遇到了很多问题。我认为这是使用ipojo技术使用命令式实例化不可避免的缺点:基本上是通过调用factory.createComponentInstance(config)来说明何时需要服务,所以您有责任说明什么时候完成它。这迫使我保留两个引用,一个用于我想要使用的服务,另一个用于iPojo ComponentInstance,以便当使用者完成时,它可以调用componentInstance.dispose()。如果没有,就会有漏洞
在消费者不需要处理iPojo服务及其实例的生命周期的情况下,是否有更多的声明性方法来做到这一点?
为了简化我的用法,假设有一个带有按钮的UI,每次按下该按钮,我都需要一个新的、唯一的iPojo服务实例。理想情况下,当实例超出作用域时,该实例将是GC'd,而不需要使用者做任何事情
也许我的错误是使用服务作为实例,但我有三个理由使用服务而不是普通的类和调用new。
作为第二个请求,有没有人知道任何使用iPojo的开源(即不是虚拟的,演示)项目,我可以作为iPojo良好使用的例子吗?
发布于 2015-04-21 06:59:38
与其创建组件实例,您可能应该使用自定义的“创建策略”。因此,您将只有一个组件实例,但是管理了几个“实现”实例(服务对象)。您可以决定何时创建和释放这些对象。关于http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html#service-serving-object-creation的更多信息。
关于使用iPOJO的项目,您可以查看Wisdom框架,它依赖于iPOJO:http://wisdom-framework.org (可用代码:github.com/智-框架/智/)
https://stackoverflow.com/questions/29757336
复制相似问题