gpt4 book ai didi

java - 在运行时配置 OSGi 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 06:58:36 24 4
gpt4 key购买 nike

OSGi 声明性服务似乎需要在 bundle 的 Service-Component list header 中引用的 XML 描述符,该描述符必须在编译时添加到 bundle 中。 Spring DM 似乎也是这样做的。

如何在模块编译后发生依赖注入(inject),即。使用在捆绑激活时解析的文件系统中的某种配置文件将类插入在一起?

最佳答案

在 OSGi 中,您有μservices,这些是组件服务注册表注册的对象。声明性服务 (DS) 中的 XML 描述了组件类想要注册的服务,并声明了依赖项,即该组件类所需的服务。

当保存组件类的包被激活时,DS 会收到通知并读取 XML 描述符以找出依赖关系。当满足所有强制依赖关系时,它会实例化组件类并使用 Java 反射注入(inject)所需的服务。这些服务是实现服务接口(interface)的普通 java 对象。一旦注入(inject)发生,它(可选)调用组件上的 activate 方法,然后将组件注册为服务。

如果依赖项(服务)发生更改,则组件将被修改或关闭。可以重复此操作,直到捆绑停止。

因此,对于一般性答案,注入(inject)器可以读取配置文件,实例化提到的类,然后根据此描述将它们连接在一起。 OSGi 非常独特,因为它不仅允许创建连接,还可以取消组件连接。

现在是您的用例。仅在最极端的情况下才应选择 JDBC 实现。 OSGi 的整体思想是部署者选择您应该使用的 JDBC 驱动程序。因此,正如您自己指出的那样,您应该使用注册表中的任何内容。该模型使部署人员可以更灵活地选择 JDBC 驱动程序。

但是,有时您确实需要供应商 X 的 JDBC 驱动程序的这一独特功能。在这种情况下,最好的解决方案是在代码中使用实现类,这将允许工具发现您具有此实现依赖项。

关于java - 在运行时配置 OSGi 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982009/

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