gpt4 book ai didi

java - iPojo实例创建和管理

转载 作者:行者123 更新时间:2023-12-01 11:38:28 24 4
gpt4 key购买 nike

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

是否有一种更具声明性的方法来执行此操作,而消费者不需要处理 iPojo 服务及其实例的生命周期?

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

也许我的错误是使用服务作为实例,但我有三个理由使用服务而不是普通类并调用 new

  1. 服务实现应该是可替代的
  2. 消费者应该依赖于接口(interface),而不是实现/提供者,不仅是因为 #1,还因为在依赖于具体实现时会拉动更多的传递依赖
  3. 服务实现本身有一些依赖项,我希望这些依赖项将由 iPojo 注入(inject)(依赖项注入(inject))。

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

最佳答案

您可能应该使用自定义“创建策略”,而不是创建组件实例。因此,您将只有一个组件实例,但管理多个“实现”实例(服务对象)。您决定何时创建和处置这些对象。更多信息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 Framework,它依赖于iPOJO:http://wisdom-framework.org (代码可在:github.com/wisdom-framework/wisdom/)

关于java - iPojo实例创建和管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com