gpt4 book ai didi

OSGi - 如何 OSGi - 我可以创建一个组件来根据参数注册不同的实现?工厂?

转载 作者:行者123 更新时间:2023-12-01 22:27:23 25 4
gpt4 key购买 nike

我有以下 bundle :- GreetingAPI(定义 greeting() 方法的包)(服务)- GreetingImpl1(为英语模式实现 greeting() 方法的包)- GreetingImpl2(为意大利语模式实现 greeting() 方法的包)- GreetingConsumer(使用问候服务的包)

我如何创建一个基于给定语言参数的组件(我想它是一个工厂)让消费者捆绑使用服务的不同实现。

最佳答案

您的想法是错误的。提供者不应根据消费者所做的事情注册不同的服务,因为提供者不应该了解消费者的任何信息。

相反,您可以拥有同一服务的多个提供者,但使用适当的元数据对它们进行注释。然后服务的消费者可以选择是否过滤特定属性。

例如,当我们注册一个服务时,我们可以按如下方式添加属性(请注意,我使用的是 OSGi 声明式服务注释,请参阅 OSGi Compendium Release 5,第 112.8 节):

@Component(property = "locale=en_GB")
public class MyGreetingImpl1 implements Greeting {
public String greet() { return "How do you do"; }
}

@Component(property = "locale=en_US")
public class MyGreetingImpl2 implements Greeting {
public String greet() { return "Howdy"; }
}

@Component(property = "locale=fr_FR")
public class MyGreetingImpl3 implements Greeting {
public String greet() { return "Bonjour"; }
}

现在,消费者可以使用目标筛选器选择所需的语言。注意通配符的使用,因为在这种情况下消费者只关心语言而不关心国家代码:

@Component
public class GreetingConsumer {

@Reference(target = "(language=en*)")
public void setGreeting(Greeting greeting) { ... }

}

关于OSGi - 如何 OSGi - 我可以创建一个组件来根据参数注册不同的实现?工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31891995/

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