gpt4 book ai didi

Java API的newInstance和OSGi

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

是否存在可以直接在 OSGi 上下文中创建新工厂实例的情况?具体来说,Java API 中的 newInstance() 怎么样?

例如,是否可以调用 TransformerFactory.newInstance() 还是应该避免调用?我认为应该没问题,因为它是Java API的一部分,但是文档指定使用META-INF/services来定位实现。这是否意味着它不能按预期与 OSGi 和第三方 xml 转换器(例如 Saxon)结合使用?

在 OSGi 中使用 XML 相关工厂(例如 TransformerFactory)的正确方法是什么?

最佳答案

您应该避免在 OSGi 中使用 SPI。包含 Factory 类的 bundle 的类加载器通常看不到实现 API 的 bundle 的 META-INF/服务。

实现 API 的包应该注册一个或多个 OSGi 服务,而不是 META-INF/services。可以轻松编写仅进行实例化和 OSGi 服务注册的适配器包。

您可以在 OSGi 纲要规范的“702 XML 解析器服务规范”中找到 SAXParserSAXParserFactory 的示例。对于 TransformerFactory 来说,应该使用类似的解决方案。

更新

在某些情况下,无法将这些工厂类用作 OSGi 服务。例如:如果您使用使用 TransformerFactory 的技术。

对于我创建的 XML 相关 API osgi-xmlcommons-full那个

  • 包含 xml-api 及其实现
  • 以在 xmlcommons-full 包中搜索实现的方式覆盖类加载机制

通过使用该 bundle ,使用 XML 相关工厂的旧技术将更有可能正常工作。为了确保从此包中加载与 XML 相关的 API,建议以排除上述包的方式覆盖 org.osgi.framework.system.packages 系统属性。 p>

该 bundle 还可在 maven-central 上获取。 .

关于Java API的newInstance和OSGi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807201/

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