当前位置: 首页 > 知识库问答 >
问题:

OSGI SCR框架中的可选依赖项

洪通
2023-03-14

我正在使用OSGI felix平台中的SCR框架在我的组件中注入服务引用。除了可选的依赖项外,这非常有效。因此,如果我有两个组件Foo和Bar,其中Foo如下所示:

@Component
public class FooImpl implements Foo {
    Log log = LogFactory.getLog(this.getClass());
    @Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY)
    Bar bar;

    public void bindBar(Bar bar) {
        log.info("bar bound: "+bar);
    }
    public void unbindBar(Bar map) {
        log.info("bar unbound: "+bar);
    }

    @override
    public void fooHello() {
        log.info("Hello, this is an implementation of Foo");
    }
}

只要定义Bar接口的捆绑包部署在我的OSGi平台中,这就可以工作。如果平台中没有激活Bar实现组件,SCR仍然很高兴,并将激活我的FoImpl组件,当然无需参考任何Bar实现。但是,如果Bar接口未部署在平台中,SCR在激活组件期间崩溃,可能是由于通过反射检查组件的异常,但我无法确定。

那么,有没有一种方法可以部署具有可选依赖项的OSGI捆绑包,这些可选依赖项不存在于包含SCR组件的平台中,这些组件对来自这些可选OSGI依赖项的接口具有可选引用?

共有1个答案

秦楚
2023-03-14

OSGi依赖项可用于注入某些类型的实现,如BarImpl类实现Bar接口,该接口可被注入到@参考栏字段。可选依赖项意味着OSGi组件可以使用某些服务,但不需要它工作。

然而,如果OSGi不知道您试图用作字段的类型,您将得到一个异常,这是一个有效的行为。如果类的字段具有未知类型,则不能使用该类——不仅对于OSGi是如此,对于Java也是如此。

这里的一个好方法是将包含Bar实现的bundle拆分为两个bundle:

  • bar-api包含bar接口,
  • bar impl包含OSGi服务BarImpl

FooImpl仍然需要bar-api,但是bar-impl确实是可选的,在Felix控制台中禁用它不会中断引用组件。

 类似资料:
  • 问题内容: 我试图在跨多个页面使用的AngularJS中实现一个控制器。它利用了一些服务。其中一些已加载到所有页面上,有些则未加载。我的意思是它是在不同的文件中定义的,并且这些文件是独立加载的。但是,如果我没有在所有页面上加载这些服务,则会出现错误: 因此,我需要在所有页面上加载脚本。我可以在Angular中将依赖项声明为可选吗?例如: 问题答案: 不,Angular还不支持现成的可选依赖项。您最

  • 主要内容:排除依赖,可选依赖,排除依赖 VS 可选依赖 我们知道 Maven 依赖具有传递性,例如 A 依赖于 B,B 依赖于 C,在不考虑依赖范围等因素的情况下,Maven 会根据依赖传递机制,将间接依赖 C 引入到 A 中。但如果 A 出于某种原因,希望将间接依赖 C 排除,那该怎么办呢?Maven 为用户提供了两种解决方式:排除依赖(Dependency Exclusions)和可选依赖(Optional Dependencies)。 排除依赖

  • 在不讨论原因的情况下,假设有人想要一个老式的Play Framework web服务,并且不想使用依赖注入,也不想依赖Google的Guice。在玩法2.8.x中还可能吗? 有没有一个简单的方法可以让你不去这里就呆在老学校里? 我承认,但不完全理解https://www.playframework.com/documentation/2.4.x/migration24。我认为我的问题与2.7中删除

  • 问题内容: 我想知道 _什么是Spring Framework? 为什么和何时应该在Java Enterprise开发中使用它? _ 答案将是“依赖注入框架”。好了,使用依赖注入框架时我们有什么优势?用setter值和/或构造函数参数描述类的想法对我来说似乎很奇怪。为什么这样 因为我们可以更改属性而无需重新编译项目?这就是我们所获得的一切吗? 那么,我们应该用什么对象来描述?所有对象还是只有几个?

  • 本文向大家介绍详解Android控件状态依赖框架,包括了详解Android控件状态依赖框架的使用技巧和注意事项,需要的朋友参考一下 在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入(EditText)和多个操作(MotionEvent和KeyEvent),且操作依赖于输入的状态。如下图所示的场景: 设定图中 确认操作依赖于商品编码和储位的状态 跳过操作不依赖于输入状态 登